/ Hex Artifact Content
Login

Artifact 3e3612cd37891a183572300c5bc65cb03f1fab57b83d278b484e88a49073e262:


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 54 68 69 73 20 69 73 20 61  ./*.** This is a
2ff0: 20 6d 61 67 69 63 20 73 74 72 69 6e 67 20 74 68   magic string th
3000: 61 74 20 61 70 70 65 61 72 73 20 61 74 20 74 68  at appears at th
3010: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 65  e beginning of e
3020: 76 65 72 79 0a 2a 2a 20 53 51 4c 69 74 65 20 64  very.** SQLite d
3030: 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72  atabase in order
3040: 20 74 6f 20 69 64 65 6e 74 69 66 79 20 74 68 65   to identify the
3050: 20 66 69 6c 65 20 61 73 20 61 20 72 65 61 6c 20   file as a real 
3060: 64 61 74 61 62 61 73 65 2e 0a 2a 2a 0a 2a 2a 20  database..**.** 
3070: 59 6f 75 20 63 61 6e 20 63 68 61 6e 67 65 20 74  You can change t
3080: 68 69 73 20 76 61 6c 75 65 20 61 74 20 63 6f 6d  his value at com
3090: 70 69 6c 65 2d 74 69 6d 65 20 62 79 20 73 70 65  pile-time by spe
30a0: 63 69 66 79 69 6e 67 20 61 0a 2a 2a 20 2d 44 53  cifying a.** -DS
30b0: 51 4c 49 54 45 5f 46 49 4c 45 5f 48 45 41 44 45  QLITE_FILE_HEADE
30c0: 52 3d 22 2e 2e 2e 22 20 6f 6e 20 74 68 65 20 63  R="..." on the c
30d0: 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 2d  ompiler command-
30e0: 6c 69 6e 65 2e 20 20 54 68 65 0a 2a 2a 20 68 65  line.  The.** he
30f0: 61 64 65 72 20 6d 75 73 74 20 62 65 20 65 78 61  ader must be exa
3100: 63 74 6c 79 20 31 36 20 62 79 74 65 73 20 69 6e  ctly 16 bytes in
3110: 63 6c 75 64 69 6e 67 20 74 68 65 20 7a 65 72 6f  cluding the zero
3120: 2d 74 65 72 6d 69 6e 61 74 6f 72 20 73 6f 0a 2a  -terminator so.*
3130: 2a 20 74 68 65 20 73 74 72 69 6e 67 20 69 74 73  * the string its
3140: 65 6c 66 20 73 68 6f 75 6c 64 20 62 65 20 31 35  elf should be 15
3150: 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
3160: 2e 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65  .  If you change
3170: 0a 2a 2a 20 74 68 65 20 68 65 61 64 65 72 2c 20  .** the header, 
3180: 74 68 65 6e 20 79 6f 75 72 20 63 75 73 74 6f 6d  then your custom
3190: 20 6c 69 62 72 61 72 79 20 77 69 6c 6c 20 6e 6f   library will no
31a0: 74 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61  t be able to rea
31b0: 64 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20  d .** databases 
31c0: 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
31d0: 20 73 74 61 6e 64 61 72 64 20 74 6f 6f 6c 73 20   standard tools 
31e0: 61 6e 64 20 74 68 65 20 73 74 61 6e 64 61 72 64  and the standard
31f0: 20 74 6f 6f 6c 73 0a 2a 2a 20 77 69 6c 6c 20 6e   tools.** will n
3200: 6f 74 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65  ot be able to re
3210: 61 64 20 64 61 74 61 62 61 73 65 73 20 63 72 65  ad databases cre
3220: 61 74 65 64 20 62 79 20 79 6f 75 72 20 63 75 73  ated by your cus
3230: 74 6f 6d 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  tom library..*/.
3240: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 46  #ifndef SQLITE_F
3250: 49 4c 45 5f 48 45 41 44 45 52 20 2f 2a 20 31 32  ILE_HEADER /* 12
3260: 33 34 35 36 37 38 39 20 31 32 33 34 35 36 20 2a  3456789 123456 *
3270: 2f 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  /.#  define SQLI
3280: 54 45 5f 46 49 4c 45 5f 48 45 41 44 45 52 20 22  TE_FILE_HEADER "
3290: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22  SQLite format 3"
32a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
32b0: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
32c0: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
32d0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
32e0: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
32f0: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
3300: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
3310: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
3320: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
3330: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3340: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
3350: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
3360: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
3370: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
3380: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
3390: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
33a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
33b0: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
33c0: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
33d0: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
33e0: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
33f0: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
3400: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
3410: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
3420: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
3430: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
3440: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
3450: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
3460: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
3470: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
3480: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
3490: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
34a0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
34b0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
34c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
34d0: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
34e0: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
34f0: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
3500: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
3510: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
3520: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
3530: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
3540: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
3550: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
3560: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
3570: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
3580: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
3590: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
35a0: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
35b0: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
35c0: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
35d0: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
35e0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
35f0: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
3600: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
3610: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
3620: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
3630: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
3640: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
3650: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
3660: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
3670: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
3680: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
3690: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
36a0: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
36b0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
36c0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
36d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
36e0: 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69  TE_DEBUG).# defi
36f0: 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64  ne NDEBUG 1.#end
3700: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e  if.#if defined(N
3710: 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
3720: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
3730: 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  # undef NDEBUG.#
3740: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61  endif../*.** Ena
3750: 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ble SQLITE_ENABL
3760: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
3770: 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  TS if SQLITE_DEB
3780: 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e  UG is turned on.
3790: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
37a0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45  (SQLITE_ENABLE_E
37b0: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29  XPLAIN_COMMENTS)
37c0: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
37d0: 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69  TE_DEBUG).# defi
37e0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
37f0: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
3800: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
3810: 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29  * The testcase()
3820: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
3830: 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67  o aid in coverag
3840: 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e  e testing.  When
3850: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
3860: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
3870: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
3880: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
3890: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
38a0: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
38b0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
38c0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
38d0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
38e0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
38f0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
3900: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
3910: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
3920: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
3930: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
3940: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
3950: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
3960: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
3970: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
3980: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
3990: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
39a0: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
39b0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
39c0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
39d0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
39e0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
39f0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
3a00: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
3a10: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
3a20: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
3a30: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
3a40: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
3a50: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
3a60: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
3a70: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
3a80: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
3a90: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
3aa0: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
3ab0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
3ac0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
3ad0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3ae0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
3af0: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
3b00: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
3b10: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
3b20: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
3b30: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
3b40: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
3b50: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
3b60: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
3b70: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
3b80: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
3b90: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
3ba0: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
3bb0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
3bc0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
3bd0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
3be0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
3bf0: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
3c00: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
3c10: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
3c20: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
3c30: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3c40: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
3c50: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
3c60: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
3c70: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
3c80: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
3c90: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
3ca0: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
3cb0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
3cc0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
3cd0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
3ce0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
3cf0: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
3d00: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
3d10: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
3d20: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
3d30: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
3d40: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3d50: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
3d60: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
3d70: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
3d80: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
3d90: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
3da0: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
3db0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
3dc0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
3dd0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
3de0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
3df0: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
3e00: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
3e10: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
3e20: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
3e30: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
3e40: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
3e50: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
3e60: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
3e70: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
3e80: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
3e90: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
3ea0: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
3eb0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
3ec0: 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64  ch.** are intend
3ed0: 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20  ed to always be 
3ee0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72  true or false, r
3ef0: 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75  espectively.  Su
3f00: 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  ch.** expression
3f10: 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74  s could be omitt
3f20: 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65  ed from the code
3f30: 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75   completely.  Bu
3f40: 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e  t they.** are in
3f50: 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77 20  cluded in a few 
3f60: 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74  cases in order t
3f70: 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65  o enhance the re
3f80: 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53  silience.** of S
3f90: 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63  QLite to unexpec
3fa0: 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74  ted behavior - t
3fb0: 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20  o make the code 
3fc0: 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a  "self-healing".*
3fd0: 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72  * or "ductile" r
3fe0: 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67  ather than being
3ff0: 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63   "brittle" and c
4000: 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20 66  rashing at the f
4010: 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20  irst.** hint of 
4020: 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69  unplanned behavi
4030: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68  or..**.** In oth
4040: 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53  er words, ALWAYS
4050: 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61   and NEVER are a
4060: 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69  dded for defensi
4070: 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57  ve code..**.** W
4080: 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  hen doing covera
4090: 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59  ge testing ALWAY
40a0: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
40b0: 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a  hard-coded to.**
40c0: 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c   be true and fal
40d0: 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75  se so that the u
40e0: 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20  nreachable code 
40f0: 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69 6c  they specify wil
4100: 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e  l.** not be coun
4110: 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20  ted as untested 
4120: 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  code..*/.#if def
4130: 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45  ined(SQLITE_COVE
4140: 52 41 47 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  RAGE_TEST) || de
4150: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
4160: 41 54 49 4f 4e 5f 54 45 53 54 29 0a 23 20 64 65  ATION_TEST).# de
4170: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
4180: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
4190: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
41a0: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
41b0: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
41c0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
41d0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
41e0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
41f0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
4200: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
4210: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
4220: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
4230: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
4240: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
4250: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
4260: 2a 2a 20 53 6f 6d 65 20 63 6f 6e 64 69 74 69 6f  ** Some conditio
4270: 6e 61 6c 73 20 61 72 65 20 6f 70 74 69 6d 69 7a  nals are optimiz
4280: 61 74 69 6f 6e 73 20 6f 6e 6c 79 2e 20 20 49 6e  ations only.  In
4290: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
42a0: 20 74 68 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f   the.** conditio
42b0: 6e 61 6c 73 20 61 72 65 20 72 65 70 6c 61 63 65  nals are replace
42c0: 64 20 77 69 74 68 20 61 20 63 6f 6e 73 74 61 6e  d with a constan
42d0: 74 20 31 20 28 74 72 75 65 29 20 6f 72 20 30 20  t 1 (true) or 0 
42e0: 28 66 61 6c 73 65 29 20 74 68 65 6e 0a 2a 2a 20  (false) then.** 
42f0: 74 68 65 20 63 6f 72 72 65 63 74 20 61 6e 73 77  the correct answ
4300: 65 72 20 69 73 20 73 74 69 6c 6c 20 6f 62 74 61  er is still obta
4310: 69 6e 65 64 2c 20 74 68 6f 75 67 68 20 70 65 72  ined, though per
4320: 68 61 70 73 20 6e 6f 74 20 61 73 20 71 75 69 63  haps not as quic
4330: 6b 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  kly..**.** The f
4340: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
4350: 6d 61 72 6b 20 74 68 65 73 65 20 6f 70 74 69 6d  mark these optim
4360: 69 7a 61 74 69 6f 6e 73 20 63 6f 6e 64 69 74 69  izations conditi
4370: 6f 6e 61 6c 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  onals..*/.#if de
4380: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
4390: 41 54 49 4f 4e 5f 54 45 53 54 29 0a 23 20 64 65  ATION_TEST).# de
43a0: 66 69 6e 65 20 4f 4b 5f 49 46 5f 41 4c 57 41 59  fine OK_IF_ALWAY
43b0: 53 5f 54 52 55 45 28 58 29 20 20 28 31 29 0a 23  S_TRUE(X)  (1).#
43c0: 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41 4c   define OK_IF_AL
43d0: 57 41 59 53 5f 46 41 4c 53 45 28 58 29 20 28 30  WAYS_FALSE(X) (0
43e0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
43f0: 20 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 54 52   OK_IF_ALWAYS_TR
4400: 55 45 28 58 29 20 20 28 58 29 0a 23 20 64 65 66  UE(X)  (X).# def
4410: 69 6e 65 20 4f 4b 5f 49 46 5f 41 4c 57 41 59 53  ine OK_IF_ALWAYS
4420: 5f 46 41 4c 53 45 28 58 29 20 28 58 29 0a 23 65  _FALSE(X) (X).#e
4430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65  ndif../*.** Some
4440: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
4450: 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62   are only possib
4460: 6c 65 20 69 66 20 53 51 4c 49 54 45 5f 54 45 53  le if SQLITE_TES
4470: 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  T_REALLOC_STRESS
4480: 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64 2e 20   is.** defined. 
4490: 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66 65   We need to defe
44a0: 6e 64 20 61 67 61 69 6e 73 74 20 74 68 6f 73 65  nd against those
44b0: 20 66 61 69 6c 75 72 65 73 20 77 68 65 6e 20 74   failures when t
44c0: 65 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a 20 53  esting with.** S
44d0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
44e0: 4f 43 5f 53 54 52 45 53 53 2c 20 62 75 74 20 77  OC_STRESS, but w
44f0: 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74 68 65  e don't want the
4500: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 62 72 61   unreachable bra
4510: 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e 67 20  nches.** during 
4520: 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64 2e 20  a normal build. 
4530: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
4540: 61 63 72 6f 20 63 61 6e 20 62 65 20 75 73 65 64  acro can be used
4550: 20 74 6f 20 64 69 73 61 62 6c 65 20 74 65 73 74   to disable test
4560: 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 61 6c  s.** that are al
4570: 77 61 79 73 20 66 61 6c 73 65 20 65 78 63 65 70  ways false excep
4580: 74 20 77 68 65 6e 20 53 51 4c 49 54 45 5f 54 45  t when SQLITE_TE
4590: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
45a0: 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23 69 66  S is set..*/.#if
45b0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
45c0: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
45d0: 45 53 53 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e  ESS).# define ON
45e0: 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54  LY_IF_REALLOC_ST
45f0: 52 45 53 53 28 58 29 20 20 28 58 29 0a 23 65 6c  RESS(X)  (X).#el
4600: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
4610: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c  UG).# define ONL
4620: 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  Y_IF_REALLOC_STR
4630: 45 53 53 28 58 29 20 20 28 28 58 29 3f 28 61 73  ESS(X)  ((X)?(as
4640: 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65  sert(0),1):0).#e
4650: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c  lse.# define ONL
4660: 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  Y_IF_REALLOC_STR
4670: 45 53 53 28 58 29 20 20 28 30 29 0a 23 65 6e 64  ESS(X)  (0).#end
4680: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c 61 72  if../*.** Declar
4690: 61 74 69 6f 6e 73 20 75 73 65 64 20 66 6f 72 20  ations used for 
46a0: 74 72 61 63 69 6e 67 20 74 68 65 20 6f 70 65 72  tracing the oper
46b0: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69 6e 74  ating system int
46c0: 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69 66 20  erfaces..*/.#if 
46d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 46  defined(SQLITE_F
46e0: 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c  ORCE_OS_TRACE) |
46f0: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
4700: 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20  _TEST) || \.    
4710: 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
4720: 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45  DEBUG) && SQLITE
4730: 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74 65 72  _OS_WIN).  exter
4740: 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 4f 53 54  n int sqlite3OST
4750: 72 61 63 65 3b 0a 23 20 64 65 66 69 6e 65 20 4f  race;.# define O
4760: 53 54 52 41 43 45 28 58 29 20 20 20 20 20 20 20  STRACE(X)       
4770: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 4f 53     if( sqlite3OS
4780: 54 72 61 63 65 20 29 20 73 71 6c 69 74 65 33 44  Trace ) sqlite3D
4790: 65 62 75 67 50 72 69 6e 74 66 20 58 0a 23 20 64  ebugPrintf X.# d
47a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 48 41 56  efine SQLITE_HAV
47b0: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c 73 65  E_OS_TRACE.#else
47c0: 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43  .# define OSTRAC
47d0: 45 28 58 29 0a 23 20 75 6e 64 65 66 20 20 53 51  E(X).# undef  SQ
47e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
47f0: 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  CE.#endif../*.**
4800: 20 49 73 20 74 68 65 20 73 71 6c 69 74 65 33 45   Is the sqlite3E
4810: 72 72 4e 61 6d 65 28 29 20 66 75 6e 63 74 69 6f  rrName() functio
4820: 6e 20 6e 65 65 64 65 64 20 69 6e 20 74 68 65 20  n needed in the 
4830: 62 75 69 6c 64 3f 20 20 43 75 72 72 65 6e 74 6c  build?  Currentl
4840: 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65 65 64  y,.** it is need
4850: 65 64 20 62 79 20 22 6d 75 74 65 78 5f 77 33 32  ed by "mutex_w32
4860: 2e 63 22 20 28 77 68 65 6e 20 64 65 62 75 67 67  .c" (when debugg
4870: 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e 63 22  ing), "os_win.c"
4880: 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52 41 43   (when.** OSTRAC
4890: 45 20 69 73 20 65 6e 61 62 6c 65 64 29 2c 20 61  E is enabled), a
48a0: 6e 64 20 62 79 20 73 65 76 65 72 61 6c 20 22 74  nd by several "t
48b0: 65 73 74 2a 2e 63 22 20 66 69 6c 65 73 20 28 77  est*.c" files (w
48c0: 68 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f 6d 70  hich are.** comp
48d0: 69 6c 65 64 20 75 73 69 6e 67 20 53 51 4c 49 54  iled using SQLIT
48e0: 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69 66 20  E_TEST)..*/.#if 
48f0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
4900: 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c  AVE_OS_TRACE) ||
4910: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
4920: 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28  TEST) || \.    (
4930: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
4940: 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f  EBUG) && SQLITE_
4950: 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66 69 6e 65  OS_WIN).# define
4960: 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52   SQLITE_NEED_ERR
4970: 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20 75 6e  _NAME.#else.# un
4980: 64 65 66 20 20 53 51 4c 49 54 45 5f 4e 45 45 44  def  SQLITE_NEED
4990: 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64 69 66  _ERR_NAME.#endif
49a0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 45  ../*.** SQLITE_E
49b0: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
49c0: 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f 6d 70  MMENTS is incomp
49d0: 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 49  atible with SQLI
49e0: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
49f0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4a00: 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 23 20  _OMIT_EXPLAIN.# 
4a10: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
4a20: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
4a30: 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ENTS.#endif../*.
4a40: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28  ** Return true (
4a50: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
4a60: 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74   input is an int
4a70: 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f  eger that is too
4a80: 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74   large.** to fit
4a90: 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68   in 32-bits.  Th
4aa0: 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
4ab0: 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f   inside of vario
4ac0: 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  us testcase().**
4ad0: 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66   macros to verif
4ae0: 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74  y that we have t
4af0: 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72  ested SQLite for
4b00: 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70   large-file supp
4b10: 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ort..*/.#define 
4b20: 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28  IS_BIG_INT(X)  (
4b30: 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66  ((X)&~(i64)0xfff
4b40: 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a  fffff)!=0)../*.*
4b50: 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69  * The macro unli
4b60: 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74  kely() is a hint
4b70: 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20   that surrounds 
4b80: 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70  a boolean.** exp
4b90: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
4ba0: 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20  usually false.  
4bb0: 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73  Macro likely() s
4bc0: 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f  urrounds.** a bo
4bd0: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
4be0: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
4bf0: 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69   true.  These hi
4c00: 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e  nts could,.** in
4c10: 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64   theory, be used
4c20: 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   by the compiler
4c30: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74   to generate bet
4c40: 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a  ter code, but.**
4c50: 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20   currently they 
4c60: 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74  are just comment
4c70: 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64  s for human read
4c80: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
4c90: 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29  likely(X)    (X)
4ca0: 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c  .#define unlikel
4cb0: 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c  y(X)  (X)..#incl
4cc0: 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e  ude "hash.h".#in
4cd0: 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a  clude "parse.h".
4ce0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e  #include <stdio.
4cf0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
4d00: 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  lib.h>.#include 
4d10: 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c  <string.h>.#incl
4d20: 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23  ude <assert.h>.#
4d30: 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e  include <stddef.
4d40: 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65 20 61 20  h>../*.** Use a 
4d50: 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c 61 63 65  macro to replace
4d60: 20 6d 65 6d 63 70 79 28 29 20 69 66 20 63 6f 6d   memcpy() if com
4d70: 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54  piled with SQLIT
4d80: 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 2e  E_INLINE_MEMCPY.
4d90: 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  .** This allows 
4da0: 62 65 74 74 65 72 20 6d 65 61 73 75 72 65 6d 65  better measureme
4db0: 6e 74 73 20 6f 66 20 77 68 65 72 65 20 6d 65 6d  nts of where mem
4dc0: 63 70 79 28 29 20 69 73 20 75 73 65 64 20 77 68  cpy() is used wh
4dd0: 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a 20 63 61  en running.** ca
4de0: 63 68 65 67 72 69 6e 64 2e 20 20 42 75 74 20 74  chegrind.  But t
4df0: 68 69 73 20 6d 61 63 72 6f 20 76 65 72 73 69 6f  his macro versio
4e00: 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29 20 69 73  n of memcpy() is
4e10: 20 76 65 72 79 20 73 6c 6f 77 20 73 6f 20 69 74   very slow so it
4e20: 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62  .** should not b
4e30: 65 20 75 73 65 64 20 69 6e 20 70 72 6f 64 75 63  e used in produc
4e40: 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 73 20 61  tion.  This is a
4e50: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6d 65 61   performance mea
4e60: 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68 61 63 6b  surement.** hack
4e70: 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66 64 65 66   only..*/.#ifdef
4e80: 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d   SQLITE_INLINE_M
4e90: 45 4d 43 50 59 0a 23 20 64 65 66 69 6e 65 20 6d  EMCPY.# define m
4ea0: 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20 7b 63 68  emcpy(D,S,N) {ch
4eb0: 61 72 2a 78 78 64 3d 28 63 68 61 72 2a 29 28 44  ar*xxd=(char*)(D
4ec0: 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a 78 78 73  );const char*xxs
4ed0: 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 28 53  =(const char*)(S
4ee0: 29 3b 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  );\.            
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
4f00: 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65 28 78 78  xxn=(N);while(xx
4f10: 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b 29 3d 2a  n-->0)*(xxd++)=*
4f20: 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e 64 69 66  (xxs++);}.#endif
4f30: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69  ../*.** If compi
4f40: 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65  ling for a proce
4f50: 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20  ssor that lacks 
4f60: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73  floating point s
4f70: 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74  upport,.** subst
4f80: 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f  itute integer fo
4f90: 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  r floating-point
4fa0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4fb0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
4fc0: 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64  POINT.# define d
4fd0: 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74  ouble sqlite_int
4fe0: 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61  64.# define floa
4ff0: 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  t sqlite_int64.#
5000: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
5010: 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69  LE_TYPE sqlite_i
5020: 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51  nt64.# ifndef SQ
5030: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20  LITE_BIG_DBL.#  
5040: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5050: 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65  IG_DBL (((sqlite
5060: 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a  3_int64)1)<<50).
5070: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
5080: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54   SQLITE_OMIT_DAT
5090: 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20  ETIME_FUNCS 1.# 
50a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d  define SQLITE_OM
50b0: 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64  IT_TRACE 1.# und
50c0: 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f  ef SQLITE_MIXED_
50d0: 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f  ENDIAN_64BIT_FLO
50e0: 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  AT.# undef SQLIT
50f0: 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e  E_HAVE_ISNAN.#en
5100: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
5110: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66  TE_BIG_DBL.# def
5120: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  ine SQLITE_BIG_D
5130: 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66  BL (1e99).#endif
5140: 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d  ../*.** OMIT_TEM
5150: 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20  PDB is set to 1 
5160: 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  if SQLITE_OMIT_T
5170: 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64  EMPDB is defined
5180: 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77  , or 0.** afterw
5190: 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73  ard. Having this
51a0: 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73   macro allows us
51b0: 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20   to cause the C 
51c0: 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f  compiler.** to o
51d0: 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79  mit code used by
51e0: 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74   TEMP tables wit
51f0: 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64  hout messy #ifnd
5200: 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  ef statements..*
5210: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5220: 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66  OMIT_TEMPDB.#def
5230: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
5240: 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  1.#else.#define 
5250: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65  OMIT_TEMPDB 0.#e
5260: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
5270: 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75  "file format" nu
5280: 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67  mber is an integ
5290: 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65  er that is incre
52a0: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a  mented whenever.
52b0: 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65  ** the VDBE-leve
52c0: 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68  l file format ch
52d0: 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c  anges.  The foll
52e0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66  owing macros def
52f0: 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64  ine the.** the d
5300: 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d  efault file form
5310: 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62  at for new datab
5320: 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78  ases and the max
5330: 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74  imum file format
5340: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62  .** that the lib
5350: 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a  rary can read..*
5360: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
5370: 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  _MAX_FILE_FORMAT
5380: 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   4.#ifndef SQLIT
5390: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
53a0: 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53  ORMAT.# define S
53b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
53c0: 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64  LE_FORMAT 4.#end
53d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  if../*.** Determ
53e0: 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67  ine whether trig
53f0: 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69  gers are recursi
5400: 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ve by default.  
5410: 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63  This can be.** c
5420: 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69  hanged at run-ti
5430: 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d  me using a pragm
5440: 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  a..*/.#ifndef SQ
5450: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
5460: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a  URSIVE_TRIGGERS.
5470: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5480: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
5490: 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e  E_TRIGGERS 0.#en
54a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69  dif../*.** Provi
54b0: 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  de a default val
54c0: 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ue for SQLITE_TE
54d0: 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65  MP_STORE in case
54e0: 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69   it is not speci
54f0: 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63  fied.** on the c
5500: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23  ommand-line.*/.#
5510: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45  ifndef SQLITE_TE
5520: 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e  MP_STORE.# defin
5530: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
5540: 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ORE 1.#endif../*
5550: 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20  .** If no value 
5560: 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65  has been provide
5570: 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58  d for SQLITE_MAX
5580: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c  _WORKER_THREADS,
5590: 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45   or if.** SQLITE
55a0: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73  _TEMP_STORE is s
55b0: 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75  et to 3 (never u
55c0: 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c  se temporary fil
55d0: 65 73 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74  es), set it.** t
55e0: 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53  o zero..*/.#if S
55f0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5600: 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48  ==3 || SQLITE_TH
5610: 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e  READSAFE==0.# un
5620: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
5630: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
5640: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
5650: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
5660: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
5670: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
5680: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
5690: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
56a0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38  WORKER_THREADS 8
56b0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
56c0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
56d0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
56e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56f0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
5700: 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69  EADS 0.#endif.#i
5710: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
5720: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
5730: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5740: 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65  R_THREADS.# unde
5750: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
5760: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
5770: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5780: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53  WORKER_THREADS S
5790: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
57a0: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e  RKER_THREADS.#en
57b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
57c0: 65 66 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61  efault initial a
57d0: 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68  llocation for th
57e0: 65 20 70 61 67 65 63 61 63 68 65 20 77 68 65 6e  e pagecache when
57f0: 20 75 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a   using separate.
5800: 2a 2a 20 70 61 67 65 63 61 63 68 65 73 20 66 6f  ** pagecaches fo
5810: 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
5820: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70  connection.  A p
5830: 6f 73 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69  ositive number i
5840: 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  s the.** number 
5850: 6f 66 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67  of pages.  A neg
5860: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74  ative number N t
5870: 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e  ranslations mean
5880: 73 20 74 68 61 74 20 61 20 62 75 66 66 65 72 0a  s that a buffer.
5890: 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79  ** of -1024*N by
58a0: 74 65 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  tes is allocated
58b0: 20 61 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73   and used for as
58c0: 20 6d 61 6e 79 20 70 61 67 65 73 20 61 73 20 69   many pages as i
58d0: 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2a 0a  t will hold..**.
58e0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  ** The default v
58f0: 61 6c 75 65 20 6f 66 20 22 32 30 22 20 77 61 73  alue of "20" was
5900: 20 63 68 6f 6f 73 65 6e 20 74 6f 20 6d 69 6e 69   choosen to mini
5910: 6d 69 7a 65 20 74 68 65 20 72 75 6e 2d 74 69 6d  mize the run-tim
5920: 65 20 6f 66 20 74 68 65 0a 2a 2a 20 73 70 65 65  e of the.** spee
5930: 64 74 65 73 74 31 20 74 65 73 74 20 70 72 6f 67  dtest1 test prog
5940: 72 61 6d 20 77 69 74 68 20 6f 70 74 69 6f 6e 73  ram with options
5950: 3a 20 2d 2d 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72  : --shrink-memor
5960: 79 20 2d 2d 72 65 70 72 65 70 61 72 65 0a 2a 2f  y --reprepare.*/
5970: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5980: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
5990: 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53  NITSZ.# define S
59a0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43  QLITE_DEFAULT_PC
59b0: 41 43 48 45 5f 49 4e 49 54 53 5a 20 32 30 0a 23  ACHE_INITSZ 20.#
59c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
59d0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
59e0: 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  he SQLITE_CONFIG
59f0: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5a00: 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  option..*/.#ifnd
5a10: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
5a20: 54 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45  T_SORTERREF_SIZE
5a30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5a40: 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52 52  _DEFAULT_SORTERR
5a50: 45 46 5f 53 49 5a 45 20 30 78 37 66 66 66 66 66  EF_SIZE 0x7fffff
5a60: 66 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ff.#endif../*.**
5a70: 20 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   The compile-tim
5a80: 65 20 6f 70 74 69 6f 6e 73 20 53 51 4c 49 54 45  e options SQLITE
5a90: 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45 20  _MMAP_READWRITE 
5aa0: 61 6e 64 20 0a 2a 2a 20 53 51 4c 49 54 45 5f 45  and .** SQLITE_E
5ab0: 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
5ac0: 49 43 5f 57 52 49 54 45 20 61 72 65 20 6e 6f 74  IC_WRITE are not
5ad0: 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68   compatible with
5ae0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2a   one another..**
5af0: 20 59 6f 75 20 6d 75 73 74 20 63 68 6f 6f 73 65   You must choose
5b00: 20 6f 6e 65 20 6f 72 20 74 68 65 20 6f 74 68 65   one or the othe
5b10: 72 20 28 6f 72 20 6e 65 69 74 68 65 72 29 20 62  r (or neither) b
5b20: 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2f 0a  ut not both..*/.
5b30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
5b40: 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54  TE_MMAP_READWRIT
5b50: 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  E) && defined(SQ
5b60: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43  LITE_ENABLE_BATC
5b70: 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a  H_ATOMIC_WRITE).
5b80: 23 65 72 72 6f 72 20 43 61 6e 6e 6f 74 20 75 73  #error Cannot us
5b90: 65 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 4d 4d  e both SQLITE_MM
5ba0: 41 50 5f 52 45 41 44 57 52 49 54 45 20 61 6e 64  AP_READWRITE and
5bb0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42   SQLITE_ENABLE_B
5bc0: 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ATCH_ATOMIC_WRIT
5bd0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
5be0: 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66  GCC does not def
5bf0: 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66  ine the offsetof
5c00: 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c  () macro so we'l
5c10: 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a  l have to do it.
5c20: 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f  ** ourselves..*/
5c30: 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f  .#ifndef offseto
5c40: 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74  f.#define offset
5c50: 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45  of(STRUCTURE,FIE
5c60: 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72  LD) ((int)((char
5c70: 2a 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29  *)&((STRUCTURE*)
5c80: 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64  0)->FIELD)).#end
5c90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
5ca0: 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69   to compute mini
5cb0: 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20  mum and maximum 
5cc0: 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a  of two numbers..
5cd0: 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23  */.#ifndef MIN.#
5ce0: 20 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29   define MIN(A,B)
5cf0: 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42   ((A)<(B)?(A):(B
5d00: 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  )).#endif.#ifnde
5d10: 66 20 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 4d  f MAX.# define M
5d20: 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29  AX(A,B) ((A)>(B)
5d30: 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69 66  ?(A):(B)).#endif
5d40: 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f  ../*.** Swap two
5d50: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65   objects of type
5d60: 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e   TYPE..*/.#defin
5d70: 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29  e SWAP(TYPE,A,B)
5d80: 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b   {TYPE t=A; A=B;
5d90: 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68   B=t;}../*.** Ch
5da0: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
5db0: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
5dc0: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
5dd0: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
5de0: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
5df0: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
5e00: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
5e10: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
5e20: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
5e30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5e40: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
5e50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
5e60: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
5e70: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
5e80: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
5e90: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
5ea0: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
5eb0: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
5ec0: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
5ed0: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
5ee0: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
5ef0: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
5f00: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
5f10: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
5f20: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
5f30: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
5f40: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
5f50: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
5f60: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
5f70: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
5f80: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
5f90: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5fa0: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
5fb0: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
5fc0: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
5fd0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
5fe0: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
5ff0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
6000: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
6010: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
6020: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
6030: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
6040: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
6050: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
6060: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
6070: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
6080: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
6090: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
60a0: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
60b0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
60c0: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
60d0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
60e0: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
60f0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
6100: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
6110: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
6120: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
6130: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
6140: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
6150: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
6160: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
6170: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
6180: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
6190: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
61a0: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
61b0: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
61c0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
61d0: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
61e0: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
61f0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
6200: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
6210: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
6220: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
6230: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
6240: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
6250: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
6260: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
6270: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
6280: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
6290: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
62a0: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
62b0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
62c0: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
62d0: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
62e0: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
62f0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
6300: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
6310: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
6320: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
6330: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
6340: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
6350: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
6360: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
6370: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
6380: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
6390: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
63a0: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
63b0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
63c0: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
63d0: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
63e0: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
63f0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
6400: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
6410: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
6420: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
6430: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
6440: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
6450: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
6460: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
6470: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
6480: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
6490: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
64a0: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
64b0: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
64c0: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
64d0: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
64e0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
64f0: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
6500: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
6510: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
6520: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
6530: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
6540: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
6550: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
6560: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
6570: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
6580: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
6590: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
65a0: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
65b0: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
65c0: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
65d0: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
65e0: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
65f0: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
6600: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
6610: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
6620: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
6630: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
6640: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
6650: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
6660: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
6670: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
6680: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
6690: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
66a0: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
66b0: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
66c0: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
66d0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
66e0: 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74   Estimated quant
66f0: 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71  ities used for q
6700: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72  uery planning ar
6710: 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62  e stored as 16-b
6720: 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73  it.** logarithms
6730: 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20  .  For quantity 
6740: 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  X, the value sto
6750: 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58  red is 10*log2(X
6760: 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65  ).  This.** give
6770: 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e  s a possible ran
6780: 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20  ge of values of 
6790: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e  approximately 1.
67a0: 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e  0e986 to 1e-986.
67b0: 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f  .** But the allo
67c0: 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22  wed values are "
67d0: 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76  grainy".  Not ev
67e0: 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70  ery value is rep
67f0: 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46  resentable..** F
6800: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e  or example, quan
6810: 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37  tities 16 and 17
6820: 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73   are both repres
6830: 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73  ented by a LogEs
6840: 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77  t.** of 40.  How
6850: 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45  ever, since LogE
6860: 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72  st quantities ar
6870: 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20  e suppose to be 
6880: 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f  estimates,.** no
6890: 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20  t exact values, 
68a0: 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e  this imprecision
68b0: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
68c0: 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74  m..**.** "LogEst
68d0: 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22  " is short for "
68e0: 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69  Logarithmic Esti
68f0: 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61  mate"..**.** Exa
6900: 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31  mples:.**      1
6910: 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20   -> 0           
6920: 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20     20 -> 43     
6930: 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33       10000 -> 13
6940: 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31  2.**      2 -> 1
6950: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35  0             25
6960: 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20   -> 46          
6970: 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20  25000 -> 146.** 
6980: 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20       3 -> 16    
6990: 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36          100 -> 6
69a0: 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30  6        1000000
69b0: 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20   -> 199.**      
69c0: 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20  4 -> 20         
69d0: 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20    1000 -> 99    
69e0: 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32      1048576 -> 2
69f0: 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20  00.**     10 -> 
6a00: 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32  33           102
6a10: 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34  4 -> 100    4294
6a20: 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a  967296 -> 320.**
6a30: 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63  .** The LogEst c
6a40: 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74  an be negative t
6a50: 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74  o indicate fract
6a60: 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a  ional values..**
6a70: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
6a80: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
6a90: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
6aa0: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
6ab0: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
6ac0: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
6ad0: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65  ogEst;../*.** Se
6ae0: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52  t the SQLITE_PTR
6af0: 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68  SIZE macro to th
6b00: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
6b10: 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a  s in a pointer.*
6b20: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
6b30: 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65  _PTRSIZE.# if de
6b40: 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50  fined(__SIZEOF_P
6b50: 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65  OINTER__).#   de
6b60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
6b70: 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49  IZE __SIZEOF_POI
6b80: 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65  NTER__.# elif de
6b90: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
6ba0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
6bb0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
6bc0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6bd0: 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65   \.       define
6be0: 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64  d(_M_ARM)   || d
6bf0: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20  efined(__arm__) 
6c00: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6c10: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6c20: 20 20 20 20 20 28 64 65 66 69 6e 65 64 28 5f 5f       (defined(__
6c30: 54 4f 53 5f 41 49 58 5f 5f 29 20 26 26 20 21 64  TOS_AIX__) && !d
6c40: 65 66 69 6e 65 64 28 5f 5f 36 34 42 49 54 5f 5f  efined(__64BIT__
6c50: 29 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  )).#   define SQ
6c60: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34 0a 23  LITE_PTRSIZE 4.#
6c70: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
6c80: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
6c90: 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  8.# endif.#endif
6ca0: 0a 0a 2f 2a 20 54 68 65 20 75 70 74 72 20 74 79  ../* The uptr ty
6cb0: 70 65 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  pe is an unsigne
6cc0: 64 20 69 6e 74 65 67 65 72 20 6c 61 72 67 65 20  d integer large 
6cd0: 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 61  enough to hold a
6ce0: 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20   pointer.*/.#if 
6cf0: 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44  defined(HAVE_STD
6d00: 49 4e 54 5f 48 29 0a 20 20 74 79 70 65 64 65 66  INT_H).  typedef
6d10: 20 75 69 6e 74 70 74 72 5f 74 20 75 70 74 72 3b   uintptr_t uptr;
6d20: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 50 54  .#elif SQLITE_PT
6d30: 52 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64  RSIZE==4.  typed
6d40: 65 66 20 75 33 32 20 75 70 74 72 3b 0a 23 65 6c  ef u32 uptr;.#el
6d50: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
6d60: 20 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f   uptr;.#endif../
6d70: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
6d80: 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61  WITHIN(P,S,E) ma
6d90: 63 72 6f 20 63 68 65 63 6b 73 20 74 6f 20 73 65  cro checks to se
6da0: 65 20 69 66 20 70 6f 69 6e 74 65 72 20 50 20 70  e if pointer P p
6db0: 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65  oints to.** some
6dc0: 74 68 69 6e 67 20 62 65 74 77 65 65 6e 20 53 20  thing between S 
6dd0: 28 69 6e 63 6c 75 73 69 76 65 29 20 61 6e 64 20  (inclusive) and 
6de0: 45 20 28 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a  E (exclusive)..*
6df0: 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  *.** In other wo
6e00: 72 64 73 2c 20 53 20 69 73 20 61 20 62 75 66 66  rds, S is a buff
6e10: 65 72 20 61 6e 64 20 45 20 69 73 20 61 20 70 6f  er and E is a po
6e20: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
6e30: 73 74 20 62 79 74 65 20 61 66 74 65 72 0a 2a 2a  st byte after.**
6e40: 20 74 68 65 20 65 6e 64 20 6f 66 20 62 75 66 66   the end of buff
6e50: 65 72 20 53 2e 20 20 54 68 69 73 20 6d 61 63 72  er S.  This macr
6e60: 6f 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  o returns true i
6e70: 66 20 50 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f  f P points to so
6e80: 6d 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61  mething.** conta
6e90: 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
6ea0: 62 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65  buffer S..*/.#de
6eb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54 48  fine SQLITE_WITH
6ec0: 49 4e 28 50 2c 53 2c 45 29 20 28 28 28 75 70 74  IN(P,S,E) (((upt
6ed0: 72 29 28 50 29 3e 3d 28 75 70 74 72 29 28 53 29  r)(P)>=(uptr)(S)
6ee0: 29 26 26 28 28 75 70 74 72 29 28 50 29 3c 28 75  )&&((uptr)(P)<(u
6ef0: 70 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a  ptr)(E))).../*.*
6f00: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
6f10: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
6f20: 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67  e machine is big
6f30: 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61   or little endia
6f40: 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68 65  n,.** and whethe
6f50: 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64 65  r or not that de
6f60: 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72  termination is r
6f70: 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69  un-time or compi
6f80: 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46  le-time..**.** F
6f90: 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61  or best performa
6fa0: 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74 20  nce, an attempt 
6fb0: 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73 73  is made to guess
6fc0: 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72 64   at the byte-ord
6fd0: 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72  er.** using C-pr
6fe0: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
6ff0: 73 2e 20 20 49 66 20 74 68 61 74 20 69 73 20 75  s.  If that is u
7000: 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20  nsuccessful, or 
7010: 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 42  if.** -DSQLITE_B
7020: 59 54 45 4f 52 44 45 52 3d 30 20 69 73 20 73 65  YTEORDER=0 is se
7030: 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64  t, then byte-ord
7040: 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  er is determined
7050: 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e  .** at run-time.
7060: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7070: 54 45 5f 42 59 54 45 4f 52 44 45 52 0a 23 20 69  TE_BYTEORDER.# i
7080: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
7090: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
70a0: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
70b0: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
70c0: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
70d0: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c  ned(__x86_64) ||
70e0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
70f0: 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  4__) || defined(
7100: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
7110: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
7120: 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e  _AMD64) || defin
7130: 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c  ed(_M_ARM)     |
7140: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29  | defined(__x86)
7150: 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20     ||    \.     
7160: 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29  defined(__arm__)
7170: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
7180: 41 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e  ARM64).#   defin
7190: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
71a0: 45 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69  ER    1234.# eli
71b0: 66 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29  f defined(sparc)
71c0: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
71d0: 5f 70 70 63 5f 5f 29 0a 23 20 20 20 64 65 66 69  _ppc__).#   defi
71e0: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
71f0: 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 65 6c  DER    4321.# el
7200: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
7210: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 30  LITE_BYTEORDER 0
7220: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
7230: 23 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  #if SQLITE_BYTEO
7240: 52 44 45 52 3d 3d 34 33 32 31 0a 23 20 64 65 66  RDER==4321.# def
7250: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7260: 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69  DIAN    1.# defi
7270: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7280: 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e  ENDIAN 0.# defin
7290: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
72a0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
72b0: 31 36 42 45 0a 23 65 6c 69 66 20 53 51 4c 49 54  16BE.#elif SQLIT
72c0: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31 32 33  E_BYTEORDER==123
72d0: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
72e0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
72f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7300: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
7310: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
7320: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
7330: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73  ITE_UTF16LE.#els
7340: 65 0a 23 20 69 66 64 65 66 20 53 51 4c 49 54 45  e.# ifdef SQLITE
7350: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
7360: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
7370: 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65  3one = 1;.# else
7380: 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  .  extern const 
7390: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
73a0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
73b0: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
73c0: 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28  N    (*(char *)(
73d0: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29  &sqlite3one)==0)
73e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
73f0: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a  _LITTLEENDIAN (*
7400: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7410: 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69  3one)==1).# defi
7420: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
7430: 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f 42  ATIVE  (SQLITE_B
7440: 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f  IGENDIAN?SQLITE_
7450: 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55  UTF16BE:SQLITE_U
7460: 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a  TF16LE).#endif..
7470: 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20  /*.** Constants 
7480: 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20  for the largest 
7490: 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73  and smallest pos
74a0: 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67  sible 64-bit sig
74b0: 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  ned integers..**
74c0: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72   These macros ar
74d0: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f  e designed to wo
74e0: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20  rk correctly on 
74f0: 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20  both 32-bit and 
7500: 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c  64-bit.** compil
7510: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
7520: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28  LARGEST_INT64  (
7530: 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36  0xffffffff|(((i6
7540: 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
7550: 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c  2)).#define SMAL
7560: 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36  LEST_INT64 (((i6
7570: 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f  4)-1) - LARGEST_
7580: 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  INT64)../*.** Ro
7590: 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20  und up a number 
75a0: 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67  to the next larg
75b0: 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  er multiple of 8
75c0: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a  .  This is used.
75d0: 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79  ** to force 8-by
75e0: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20  te alignment on 
75f0: 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74  64-bit architect
7600: 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ures..*/.#define
7610: 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28   ROUND8(x)     (
7620: 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a  ((x)+7)&~7)../*.
7630: 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f  ** Round down to
7640: 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c   the nearest mul
7650: 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64  tiple of 8.*/.#d
7660: 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38  efine ROUNDDOWN8
7670: 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a  (x) ((x)&~7)../*
7680: 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20  .** Assert that 
7690: 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73  the pointer X is
76a0: 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38   aligned to an 8
76b0: 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20  -byte boundary. 
76c0: 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69   This.** macro i
76d0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68  s used only with
76e0: 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76  in assert() to v
76f0: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63  erify that the c
7700: 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20  ode gets.** all 
7710: 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69  alignment restri
7720: 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a  ctions correct..
7730: 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66  **.** Except, if
7740: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
7750: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73  LIGNED_MALLOC is
7760: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74   defined, then t
7770: 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  he.** underlying
7780: 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d   malloc() implem
7790: 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72  entation might r
77a0: 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20  eturn us 4-byte 
77b0: 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74  aligned.** point
77c0: 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61  ers.  In that ca
77d0: 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20  se, only verify 
77e0: 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  4-byte alignment
77f0: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
7800: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
7810: 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e  D_MALLOC.# defin
7820: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
7830: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
7840: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
7850: 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c  r*)0)&3)==0).#el
7860: 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  se.# define EIGH
7870: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
7880: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
7890: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
78a0: 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f  7)==0).#endif../
78b0: 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41  *.** Disable MMA
78c0: 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77  P on platforms w
78d0: 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e  here it is known
78e0: 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a   to not work.*/.
78f0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70  #if defined(__Op
7900: 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69  enBSD__) || defi
7910: 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a  ned(__QNXNTO__).
7920: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
7930: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  AX_MMAP_SIZE.# d
7940: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
7950: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
7960: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
7970: 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  lt maximum size 
7980: 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62  of memory used b
7990: 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20  y memory-mapped 
79a0: 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a  I/O in the VFS.*
79b0: 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45  /.#ifdef __APPLE
79c0: 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61  __.# include <Ta
79d0: 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73  rgetConditionals
79e0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  .h>.#endif.#ifnd
79f0: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
7a00: 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65 66  AP_SIZE.# if def
7a10: 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20  ined(__linux__) 
7a20: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
7a30: 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64  WIN32) \.  || (d
7a40: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
7a50: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d  ) && defined(__M
7a60: 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64  ACH__)) \.  || d
7a70: 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a  efined(__sun) \.
7a80: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46    || defined(__F
7a90: 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c  reeBSD__) \.  ||
7aa0: 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f   defined(__Drago
7ab0: 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66 69  nFly__).#   defi
7ac0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
7ad0: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
7ae0: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
7af0: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
7b00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
7b10: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
7b20: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
7b30: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
7b40: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
7b50: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
7b60: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
7b70: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
7b80: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
7b90: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
7ba0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
7bb0: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
7bc0: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
7bd0: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
7be0: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
7bf0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
7c00: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
7c10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
7c20: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
7c30: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
7c40: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7c50: 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE>SQLITE_MAX_
7c60: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65  MMAP_SIZE.# unde
7c70: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
7c80: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
7c90: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
7ca0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c  LT_MMAP_SIZE SQL
7cb0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7cc0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
7cd0: 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49  Only one of SQLI
7ce0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20  TE_ENABLE_STAT3 
7cf0: 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
7d00: 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65  _STAT4 can be de
7d10: 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69  fined..** Priori
7d20: 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53  ty is given to S
7d30: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7d40: 54 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61  T4.  If either a
7d50: 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f  re defined, also
7d60: 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .** define SQLIT
7d70: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7d80: 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65  R_STAT4.*/.#ifde
7d90: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7da0: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
7db0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7dc0: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
7dd0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7de0: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
7df0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7e00: 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  AT3.# define SQL
7e10: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7e20: 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69  _OR_STAT4 1.#eli
7e30: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7e40: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
7e50: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
7e60: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7e70: 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AT4.#endif../*.*
7e80: 2a 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  * SELECTTRACE_EN
7e90: 41 42 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69  ABLED will be ei
7ea0: 74 68 65 72 20 31 20 6f 72 20 30 20 64 65 70 65  ther 1 or 0 depe
7eb0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
7ec0: 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53   or not.** the S
7ed0: 65 6c 65 63 74 20 71 75 65 72 79 20 67 65 6e 65  elect query gene
7ee0: 72 61 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f  rator tracing lo
7ef0: 67 69 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  gic is turned on
7f00: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
7f10: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
7f20: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
7f30: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
7f40: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
7f50: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
7f60: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
7f70: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
7f80: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7f90: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7fa0: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
7fb0: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
7fc0: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
7fd0: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
7fe0: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
7ff0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
8000: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
8010: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
8020: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
8030: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
8040: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
8050: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
8060: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
8070: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
8080: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
8090: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
80a0: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
80b0: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
80c0: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
80d0: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
80e0: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
80f0: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
8100: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8110: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
8120: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
8130: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
8140: 20 20 69 6e 74 20 28 2a 78 42 75 73 79 48 61 6e    int (*xBusyHan
8150: 64 6c 65 72 29 28 76 6f 69 64 20 2a 2c 69 6e 74  dler)(void *,int
8160: 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20  );  /* The busy 
8170: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
8180: 69 64 20 2a 70 42 75 73 79 41 72 67 3b 20 20 20  id *pBusyArg;   
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81a0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
81b0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
81c0: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81e0: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
81f0: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
8200: 73 79 20 63 61 6c 6c 20 2a 2f 0a 20 20 75 38 20  sy call */.  u8 
8210: 62 45 78 74 72 61 46 69 6c 65 41 72 67 3b 20 20  bExtraFileArg;  
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8230: 2a 20 49 6e 63 6c 75 64 65 20 73 71 6c 69 74 65  * Include sqlite
8240: 33 5f 66 69 6c 65 20 61 73 20 63 61 6c 6c 62 61  3_file as callba
8250: 63 6b 20 61 72 67 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ck arg */.};../*
8260: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
8270: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
8280: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
8290: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
82a0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
82b0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
82c0: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
82d0: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
82e0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
82f0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
8300: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
8310: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
8320: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
8330: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
8340: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
8350: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
8360: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
8370: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
8380: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
8390: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
83a0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
83b0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
83c0: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
83d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
83e0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
83f0: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
8400: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
8410: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
8420: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
8430: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
8440: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
8450: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
8460: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
8470: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
8480: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
8490: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
84a0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
84b0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
84c0: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
84d0: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
84e0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
84f0: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
8500: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
8510: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
8520: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
8530: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
8540: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
8550: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
8560: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
8570: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
8580: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
8590: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a  nstead of the.**
85a0: 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74   one parameter t
85b0: 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20  hat destructors 
85c0: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20  normally want.  
85d0: 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e  So we have to in
85e0: 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73 20  troduce.** this 
85f0: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
8600: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
8610: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
8620: 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70  ently.  Any.** p
8630: 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b  ointer will work
8640: 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73   here as long as
8650: 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74 20   it is distinct 
8660: 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54  from SQLITE_STAT
8670: 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45  IC.** and SQLITE
8680: 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23  _TRANSIENT..*/.#
8690: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59  define SQLITE_DY
86a0: 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65  NAMIC   ((sqlite
86b0: 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70  3_destructor_typ
86c0: 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  e)sqlite3MallocS
86d0: 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  ize)../*.** When
86e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
86f0: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20   is defined, it 
8700: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 74  means that the t
8710: 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64  arget platform d
8720: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f  oes.** not suppo
8730: 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61 74  rt Writable Stat
8740: 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73 75  ic Data (WSD) su
8750: 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64  ch as global and
8760: 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   static variable
8770: 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62  s..** All variab
8780: 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72 20  les must either 
8790: 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20  be on the stack 
87a0: 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  or dynamically a
87b0: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a  llocated from.**
87c0: 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e   the heap.  When
87d0: 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72   WSD is unsuppor
87e0: 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c  ted, the variabl
87f0: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73  e declarations s
8800: 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f  cattered.** thro
8810: 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74  ughout the SQLit
8820: 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f  e code must beco
8830: 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73  me constants ins
8840: 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54  tead.  The SQLIT
8850: 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69  E_WSD.** macro i
8860: 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 20  s used for this 
8870: 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e  purpose.  And in
8880: 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e  stead of referen
8890: 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c  cing the variabl
88a0: 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77  e.** directly, w
88b0: 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61  e use its consta
88c0: 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c  nt as a key to l
88d0: 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69  ookup the run-ti
88e0: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  me allocated.** 
88f0: 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64  buffer that hold
8900: 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e  s real variable.
8910: 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69    The constant i
8920: 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69  s also the initi
8930: 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68  alizer.** for th
8940: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8950: 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a  ated buffer..**.
8960: 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20  ** In the usual 
8970: 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20 69  case where WSD i
8980: 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  s supported, the
8990: 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20   SQLITE_WSD and 
89a0: 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73  GLOBAL.** macros
89b0: 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61   become no-ops a
89c0: 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72  nd have zero per
89d0: 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e  formance impact.
89e0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
89f0: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65  E_OMIT_WSD.  #de
8a00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20  fine SQLITE_WSD 
8a10: 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20  const.  #define 
8a20: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74  GLOBAL(t,v) (*(t
8a30: 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69  *)sqlite3_wsd_fi
8a40: 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20  nd((void*)&(v), 
8a50: 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64  sizeof(v))).  #d
8a60: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
8a70: 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c  balConfig GLOBAL
8a80: 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  (struct Sqlite3C
8a90: 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f  onfig, sqlite3Co
8aa0: 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69  nfig).  int sqli
8ab0: 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74  te3_wsd_init(int
8ac0: 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f   N, int J);.  vo
8ad0: 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f  id *sqlite3_wsd_
8ae0: 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e  find(void *K, in
8af0: 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t L);.#else.  #d
8b00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
8b10: 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41  .  #define GLOBA
8b20: 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69  L(t,v) v.  #defi
8b30: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8b40: 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
8b50: 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nfig.#endif../*.
8b60: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
8b70: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
8b80: 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d   to suppress com
8b90: 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61  piler warnings a
8ba0: 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74  nd to.** make it
8bb0: 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20   clear to human 
8bc0: 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66  readers when a f
8bd0: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
8be0: 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c  r is deliberatel
8bf0: 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64  y.** left unused
8c00: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8c10: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
8c20: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
8c30: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
8c40: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
8c50: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
8c60: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
8c70: 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70  ample the.** imp
8c80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
8c90: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
8ca0: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
8cb0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
8cc0: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
8cd0: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
8ce0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
8cf0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
8d00: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
8d10: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
8d20: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
8d30: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
8d40: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
8d50: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
8d60: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
8d70: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
8d80: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
8d90: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
8da0: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
8db0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
8dc0: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
8dd0: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
8de0: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
8df0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
8e00: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
8e10: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
8e20: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
8e30: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
8e40: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
8e50: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
8e60: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
8e70: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
8e80: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
8e90: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
8ea0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
8eb0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
8ec0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
8ed0: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
8ee0: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
8ef0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
8f00: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
8f10: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
8f20: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
8f30: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
8f40: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8f50: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
8f60: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
8f70: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
8f80: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
8f90: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8fa0: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
8fb0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8fc0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
8fd0: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
8fe0: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
8ff0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
9000: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9010: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
9020: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9030: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
9060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
9070: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
9080: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
9090: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
90a0: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
90b0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
90c0: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
90d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b  ypedef struct FK
90e0: 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66  ey FKey;.typedef
90f0: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74   struct FuncDest
9100: 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72  ructor FuncDestr
9110: 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73  uctor;.typedef s
9120: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75  truct FuncDef Fu
9130: 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73  ncDef;.typedef s
9140: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
9150: 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74  h FuncDefHash;.t
9160: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64  ypedef struct Id
9170: 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70  List IdList;.typ
9180: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
9190: 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66  x Index;.typedef
91a0: 20 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d   struct IndexSam
91b0: 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b  ple IndexSample;
91c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
91d0: 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73  KeyClass KeyClas
91e0: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
91f0: 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66  t KeyInfo KeyInf
9200: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9210: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b  t Lookaside Look
9220: 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73  aside;.typedef s
9230: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
9240: 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  lot LookasideSlo
9250: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9260: 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b  t Module Module;
9270: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9280: 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65  NameContext Name
9290: 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66  Context;.typedef
92a0: 20 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61   struct Parse Pa
92b0: 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  rse;.typedef str
92c0: 75 63 74 20 50 72 65 55 70 64 61 74 65 20 50 72  uct PreUpdate Pr
92d0: 65 55 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66  eUpdate;.typedef
92e0: 20 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72   struct PrintfAr
92f0: 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72  guments PrintfAr
9300: 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66  guments;.typedef
9310: 20 73 74 72 75 63 74 20 52 65 6e 61 6d 65 54 6f   struct RenameTo
9320: 6b 65 6e 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 3b  ken RenameToken;
9330: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9340: 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
9350: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
9360: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
9370: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9380: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
9390: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
93a0: 53 51 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c  SQLiteThread SQL
93b0: 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64  iteThread;.typed
93c0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
93d0: 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b  Dest SelectDest;
93e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
93f0: 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b  SrcList SrcList;
9400: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9410: 73 71 6c 69 74 65 33 5f 73 74 72 20 53 74 72 41  sqlite3_str StrA
9420: 63 63 75 6d 3b 20 2f 2a 20 49 6e 74 65 72 6e 61  ccum; /* Interna
9430: 6c 20 61 6c 69 61 73 20 66 6f 72 20 73 71 6c 69  l alias for sqli
9440: 74 65 33 5f 73 74 72 20 2a 2f 0a 74 79 70 65 64  te3_str */.typed
9450: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20  ef struct Table 
9460: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
9470: 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20  truct TableLock 
9480: 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64  TableLock;.typed
9490: 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  ef struct Token 
94a0: 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73  Token;.typedef s
94b0: 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54  truct TreeView T
94c0: 72 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66  reeView;.typedef
94d0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
94e0: 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66  Trigger;.typedef
94f0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50   struct TriggerP
9500: 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74  rg TriggerPrg;.t
9510: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
9520: 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65  iggerStep Trigge
9530: 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73  rStep;.typedef s
9540: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
9550: 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63  cord UnpackedRec
9560: 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ord;.typedef str
9570: 75 63 74 20 55 70 73 65 72 74 20 55 70 73 65 72  uct Upsert Upser
9580: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9590: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
95a0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
95b0: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
95c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
95d0: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
95e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
95f0: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
9600: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9610: 74 20 57 69 6e 64 6f 77 20 57 69 6e 64 6f 77 3b  t Window Window;
9620: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9630: 57 69 74 68 20 57 69 74 68 3b 0a 0a 0a 2f 2a 0a  With With;.../*.
9640: 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
9650: 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
9660: 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
9670: 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
9680: 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
9690: 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
96a0: 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
96b0: 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
96c0: 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
96d0: 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
96e0: 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
96f0: 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
9700: 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
9710: 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
9720: 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
9730: 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
9740: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
9750: 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20  _BITMASK_TYPE.  
9760: 74 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42  typedef SQLITE_B
9770: 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d  ITMASK_TYPE Bitm
9780: 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
9790: 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
97a0: 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
97b0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
97c0: 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
97d0: 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
97e0: 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
97f0: 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
9800: 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
9810: 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
9820: 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
9830: 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
9840: 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
9850: 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
9860: 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
9870: 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
9880: 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  int)1)<<(n)).#de
9890: 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20  fine ALLBITS    
98a0: 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a    ((Bitmask)-1).
98b0: 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65  ./* A VList obje
98c0: 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70  ct records a map
98d0: 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72  ping between par
98e0: 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65  ameters/variable
98f0: 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69  s/wildcards.** i
9900: 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  n the SQL statem
9910: 65 6e 74 20 28 73 75 63 68 20 61 73 20 24 61 62  ent (such as $ab
9920: 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a  c, @pqr, or :xyz
9930: 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  ) and the intege
9940: 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75  r.** variable nu
9950: 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  mber associated 
9960: 77 69 74 68 20 74 68 61 74 20 70 61 72 61 6d 65  with that parame
9970: 74 65 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f  ter.  See the fo
9980: 72 6d 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e  rmat description
9990: 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  .** on the sqlit
99a0: 65 33 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75  e3VListAdd() rou
99b0: 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e  tine for more in
99c0: 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c  formation.  A VL
99d0: 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a  ist is really.**
99e0: 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f   just an array o
99f0: 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74  f integers..*/.t
9a00: 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74  ypedef int VList
9a10: 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73  ;../*.** Defer s
9a20: 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61  ourcing vdbe.h a
9a30: 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c  nd btree.h until
9a40: 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22 20   after the "u8" 
9a50: 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64  and.** "BusyHand
9a60: 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20 76  ler" typedefs. v
9a70: 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69  dbe.h also requi
9a80: 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68 65  res a few of the
9a90: 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74   opaque.** point
9aa0: 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46  er types (i.e. F
9ab0: 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64 20  uncDef) defined 
9ac0: 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  above..*/.#inclu
9ad0: 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e  de "btree.h".#in
9ae0: 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23  clude "vdbe.h".#
9af0: 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68  include "pager.h
9b00: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63  ".#include "pcac
9b10: 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  he.h".#include "
9b20: 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  os.h".#include "
9b30: 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65  mutex.h"../* The
9b40: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9b50: 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69  RABLE compile-ti
9b60: 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74  me option used t
9b70: 6f 20 73 65 74 20 74 68 65 20 64 65 66 61 75 6c  o set the defaul
9b80: 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73  t.** synchronous
9b90: 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52   setting to EXTR
9ba0: 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e  A.  It is no lon
9bb0: 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a  ger supported..*
9bc0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
9bd0: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20  EXTRA_DURABLE.# 
9be0: 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49  warning Use SQLI
9bf0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9c00: 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64  RONOUS=3 instead
9c10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41   of SQLITE_EXTRA
9c20: 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e  _DURABLE.# defin
9c30: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
9c40: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23  _SYNCHRONOUS 3.#
9c50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
9c60: 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ault synchronous
9c70: 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e   levels..**.** N
9c80: 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20 68 69  ote that (for hi
9c90: 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29  storcal reasons)
9ca0: 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48   the PAGER_SYNCH
9cb0: 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20  RONOUS_* macros 
9cc0: 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74  differ.** from t
9cd0: 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  he SQLITE_DEFAUL
9ce0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61  T_SYNCHRONOUS va
9cf0: 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20  lue by 1..**.** 
9d00: 20 20 20 20 20 20 20 20 20 20 50 41 47 45 52 5f            PAGER_
9d10: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20  SYNCHRONOUS     
9d20: 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52    DEFAULT_SYNCHR
9d30: 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20  ONOUS.**   OFF  
9d40: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
9d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d60: 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c     0.**   NORMAL
9d70: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d90: 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20    1.**   FULL   
9da0: 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20         3        
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9dc0: 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20   2.**   EXTRA   
9dd0: 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20 20        4         
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9df0: 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41  3.**.** The "PRA
9e00: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22  GMA synchronous"
9e10: 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20   statement also 
9e20: 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61  uses the zero-ba
9e30: 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20  sed numbers..** 
9e40: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
9e50: 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e  the zero-based n
9e60: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
9e70: 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c  for all external
9e80: 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61   interfaces.** a
9e90: 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64  nd the one-based
9ea0: 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
9eb0: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a   internally..*/.
9ec0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
9ed0: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9ee0: 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  US.# define SQLI
9ef0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9f00: 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a  RONOUS 2.#endif.
9f10: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
9f20: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9f30: 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20  RONOUS.# define 
9f40: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9f50: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53  AL_SYNCHRONOUS S
9f60: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9f70: 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66  NCHRONOUS.#endif
9f80: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
9f90: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
9fa0: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
9fb0: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
9fc0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
9fd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9fe0: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
9ff0: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
a000: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
a010: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
a020: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
a030: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
a040: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
a050: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
a060: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
a070: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
a080: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
a090: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
a0a0: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
a0b0: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
a0c0: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
a0d0: 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20  har *zDbSName;  
a0e0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
a0f0: 68 69 73 20 64 61 74 61 62 61 73 65 2e 20 28 73  his database. (s
a100: 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20  chema name, not 
a110: 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42  filename) */.  B
a120: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
a130: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
a140: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
a150: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
a160: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
a170: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
a180: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
a190: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
a1a0: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62  o disk */.  u8 b
a1b0: 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20  SyncSet;        
a1c0: 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52 41   /* True if "PRA
a1d0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
a1e0: 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20  N" has been run 
a1f0: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
a200: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69  hema;     /* Poi
a210: 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65  nter to database
a220: 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c   schema (possibl
a230: 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a  y shared) */.};.
a240: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
a250: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
a260: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74  ing structure st
a270: 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20  ores a database 
a280: 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f  schema..**.** Mo
a290: 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  st Schema object
a2a0: 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  s are associated
a2b0: 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20   with a Btree.  
a2c0: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73  The exception is
a2d0: 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66  .** the Schema f
a2e0: 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  or the TEMP data
a2f0: 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44  baes (sqlite3.aD
a300: 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66  b[1]) which is f
a310: 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a  ree-standing..**
a320: 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   In shared cache
a330: 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20   mode, a single 
a340: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61  Schema object ca
a350: 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d  n be shared by m
a360: 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65  ultiple.** Btree
a370: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
a380: 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79  the same underly
a390: 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a  ing BtShared obj
a3a0: 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d  ect..**.** Schem
a3b0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75  a objects are au
a3c0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c  tomatically deal
a3d0: 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65  located when the
a3e0: 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74   last Btree that
a3f0: 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74  .** references t
a400: 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64  hem is destroyed
a410: 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68  .   The TEMP Sch
a420: 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20  ema is manually 
a430: 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  freed by.** sqli
a440: 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a  te3_close()..*.*
a450: 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20  * A thread must 
a460: 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  be holding a mut
a470: 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  ex on the corres
a480: 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e  ponding Btree in
a490: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63   order.** to acc
a4a0: 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65  ess Schema conte
a4b0: 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65  nt.  This implie
a4c0: 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61  s that the threa
a4d0: 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a  d must also be.*
a4e0: 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  * holding a mute
a4f0: 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  x on the sqlite3
a500: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
a510: 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68  ter that owns th
a520: 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20  e Btree..** For 
a530: 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f  a TEMP Schema, o
a540: 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  nly the connecti
a550: 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75  on mutex is requ
a560: 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ired..*/.struct 
a570: 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73  Schema {.  int s
a580: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20  chema_cookie;   
a590: 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65  /* Database sche
a5a0: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
a5b0: 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  r for this file 
a5c0: 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61  */.  int iGenera
a5d0: 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e  tion;     /* Gen
a5e0: 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e  eration counter.
a5f0: 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69    Incremented wi
a600: 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a  th each change *
a610: 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68  /.  Hash tblHash
a620: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a630: 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62  tables indexed b
a640: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
a650: 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20   idxHash;       
a660: 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20   /* All (named) 
a670: 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20  indices indexed 
a680: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
a690: 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20  h trigHash;     
a6a0: 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72    /* All trigger
a6b0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
a6c0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79  e */.  Hash fkey
a6d0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
a6e0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
a6f0: 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  by referenced ta
a700: 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61  ble name */.  Ta
a710: 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20  ble *pSeqTab;   
a720: 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65     /* The sqlite
a730: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
a740: 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52  used by AUTOINCR
a750: 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69  EMENT */.  u8 fi
a760: 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
a770: 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  /* Schema format
a780: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69   version for thi
a790: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65  s file */.  u8 e
a7a0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
a7b0: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
a7c0: 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64  g used by this d
a7d0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36  atabase */.  u16
a7e0: 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20   schemaFlags;   
a7f0: 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63    /* Flags assoc
a800: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
a810: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
a820: 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20  cache_size;     
a830: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
a840: 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68  ges to use in th
a850: 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e cache */.};../
a860: 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
a870: 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
a880: 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
a890: 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
a8a0: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
a8b0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
a8c0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
a8d0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
a8e0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
a8f0: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a900: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
a910: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
a920: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a930: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
a940: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a950: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
a960: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
a970: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
a980: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
a990: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28  ->schemaFlags|=(
a9a0: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
a9b0: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
a9c0: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
a9d0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a9e0: 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
a9f0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
aa00: 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68   for the DB.pSch
aa10: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
aa20: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
aa30: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
aa40: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
aa50: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
aa60: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
aa70: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
aa80: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
aa90: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
aaa0: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
aab0: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
aac0: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
aad0: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
aae0: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
aaf0: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
ab00: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
ab10: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
ab20: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
ab30: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
ab40: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
ab50: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
ab60: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
ab70: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
ab80: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
ab90: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
aba0: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
abb0: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
abc0: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
abd0: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
abe0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
abf0: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
ac00: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
ac10: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
ac20: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
ac30: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ) */.#define DB_
ac40: 52 65 73 65 74 57 61 6e 74 65 64 20 20 20 20 20  ResetWanted     
ac50: 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65 74  0x0008  /* Reset
ac60: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
ac70: 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20   nSchemaLock==0 
ac80: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
ac90: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
aca0: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
acb0: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
acc0: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
acd0: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
ace0: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
acf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ad00: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
ad10: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
ad20: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
ad30: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
ad40: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
ad50: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
ad60: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
ad70: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
ad80: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
ad90: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
ada0: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
adb0: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
adc0: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
add0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
ade0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
adf0: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
ae00: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
ae10: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
ae20: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
ae30: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
ae40: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
ae50: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
ae60: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
ae70: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
ae80: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
ae90: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
aea0: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
aeb0: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
aec0: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
aed0: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
aee0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
aef0: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
af00: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
af10: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
af20: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
af30: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
af40: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
af50: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
af60: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
af70: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
af80: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
af90: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
afa0: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
afb0: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
afc0: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
afd0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
afe0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
aff0: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
b000: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
b010: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
b020: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
b030: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
b040: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
b050: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
b060: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
b070: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
b080: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
b090: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
b0a0: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
b0b0: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
b0c0: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
b0d0: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
b0e0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
b0f0: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
b100: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
b110: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
b120: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
b130: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
b140: 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73  ide {.  u32 bDis
b150: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
b160: 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20  /* Only operate 
b170: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68  the lookaside wh
b180: 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36  en zero */.  u16
b190: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
b1a0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
b1b0: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
b1c0: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ytes */.  u8 bMa
b1d0: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
b1e0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
b1f0: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
b200: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
b210: 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f  () */.  u32 nSlo
b220: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b230: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f  /* Number of loo
b240: 6b 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c  kaside slots all
b250: 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32 20  ocated */.  u32 
b260: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
b270: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
b280: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
b290: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
b2a0: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
b2b0: 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a  lot *pInit;   /*
b2c0: 20 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72 73   List of buffers
b2d0: 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
b2e0: 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  used */.  Lookas
b2f0: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
b300: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
b310: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
b320: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
b330: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
b340: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
b350: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
b360: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
b370: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
b380: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
b390: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
b3a0: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
b3b0: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
b3c0: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
b3d0: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
b3e0: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
b3f0: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
b400: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
b410: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
b420: 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c  h table for buil
b430: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65  t-in function de
b440: 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70  finitions.  (App
b450: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
b460: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73  .** functions us
b470: 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c  e a regular tabl
b480: 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73  e table from has
b490: 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68  h.h.).**.** Hash
b4a0: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
b4b0: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
b4c0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
b4d0: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
b4e0: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
b4f0: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
b500: 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 20 20  u.pHash chain.  
b510: 55 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 46  Use the SQLITE_F
b520: 55 4e 43 5f 48 41 53 48 28 29 0a 2a 2a 20 6d 61  UNC_HASH().** ma
b530: 63 72 6f 20 74 6f 20 63 6f 6d 70 75 74 65 20 61  cro to compute a
b540: 20 68 61 73 68 20 6f 6e 20 74 68 65 20 66 75 6e   hash on the fun
b550: 63 74 69 6f 6e 20 6e 61 6d 65 2e 0a 2a 2f 0a 23  ction name..*/.#
b560: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
b570: 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74  NC_HASH_SZ 23.st
b580: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
b590: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
b5a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b5b0: 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  _SZ];       /* H
b5c0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
b5d0: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 23 64  nctions */.};.#d
b5e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b5f0: 43 5f 48 41 53 48 28 43 2c 4c 29 20 28 28 28 43  C_HASH(C,L) (((C
b600: 29 2b 28 4c 29 29 25 53 51 4c 49 54 45 5f 46 55  )+(L))%SQLITE_FU
b610: 4e 43 5f 48 41 53 48 5f 53 5a 29 0a 0a 23 69 66  NC_HASH_SZ)..#if
b620: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
b630: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f  AUTHENTICATION./
b640: 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e  *.** Information
b650: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71   held in the "sq
b660: 6c 69 74 65 33 22 20 64 61 74 61 62 61 73 65 20  lite3" database 
b670: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
b680: 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  t and used.** to
b690: 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75 74   manage user aut
b6a0: 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a  hentication..*/.
b6b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73  typedef struct s
b6c0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
b6d0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
b6e0: 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  ;.struct sqlite3
b6f0: 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38  _userauth {.  u8
b700: 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20   authLevel;     
b710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
b720: 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63  urrent authentic
b730: 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20  ation level */. 
b740: 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20   int nAuthPW;   
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b760: 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41  * Size of the zA
b770: 75 74 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a  uthPW in bytes *
b780: 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50  /.  char *zAuthP
b790: 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  W;              
b7a0: 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73    /* Password us
b7b0: 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61  ed to authentica
b7c0: 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  te */.  char *zA
b7d0: 75 74 68 55 73 65 72 3b 20 20 20 20 20 20 20 20  uthUser;        
b7e0: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61        /* User na
b7f0: 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74 68 65  me used to authe
b800: 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f  nticate */.};../
b810: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
b820: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65   for sqlite3_use
b830: 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20  rauth.authLevel 
b840: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
b850: 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20  _Unknown     0  
b860: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
b870: 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65  tion not yet che
b880: 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cked */.#define 
b890: 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20  UAUTH_Fail      
b8a0: 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20    1     /* User 
b8b0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66  authentication f
b8c0: 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ailed */.#define
b8d0: 20 55 41 55 54 48 5f 55 73 65 72 20 20 20 20 20   UAUTH_User     
b8e0: 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68     2     /* Auth
b8f0: 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 20 6e  enticated as a n
b900: 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64  ormal user */.#d
b910: 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69  efine UAUTH_Admi
b920: 6e 20 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a  n       3     /*
b930: 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61   Authenticated a
b940: 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74  s an administrat
b950: 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69  or */../* Functi
b960: 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79  ons used only by
b970: 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74   user authorizat
b980: 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74  ion logic */.int
b990: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
b9a0: 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72  Table(const char
b9b0: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  *);.int sqlite3U
b9c0: 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69  serAuthCheckLogi
b9d0: 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
b9e0: 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69   char*,u8*);.voi
b9f0: 64 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  d sqlite3UserAut
ba00: 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b  hInit(sqlite3*);
ba10: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79  .void sqlite3Cry
ba20: 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63  ptFunc(sqlite3_c
ba30: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
ba40: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23  te3_value**);..#
ba50: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ba60: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
ba70: 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79  ION */../*.** ty
ba80: 70 65 64 65 66 20 66 6f 72 20 74 68 65 20 61 75  pedef for the au
ba90: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c  thorization call
baa0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  back function..*
bab0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
bac0: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
bad0: 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e  ION.  typedef in
bae0: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
baf0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
bb00: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
bb10: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
bb20: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb40: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
bb50: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
bb60: 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20  e.  typedef int 
bb70: 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29  (*sqlite3_xauth)
bb80: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
bb90: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
bba0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a  r*,const char*,.
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
bbd0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
bbe0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
bbf0: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
bc00: 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73 20 61  TED./* This is a
bc10: 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45 5f 54  n extra SQLITE_T
bc20: 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61 74 20  RACE macro that 
bc30: 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67 61 63  indicates "legac
bc40: 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e  y" tracing.** in
bc50: 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20 73 71   the style of sq
bc60: 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f  lite3_trace().*/
bc70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc80: 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 20 20  TRACE_LEGACY    
bc90: 20 20 20 20 20 20 30 78 34 30 20 20 20 20 20 2f        0x40     /
bca0: 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61 63 79  * Use the legacy
bcb0: 20 78 54 72 61 63 65 20 2a 2f 0a 23 64 65 66 69   xTrace */.#defi
bcc0: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
bcd0: 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20 20  XPROFILE        
bce0: 30 78 38 30 20 20 20 20 20 2f 2a 20 55 73 65 20  0x80     /* Use 
bcf0: 74 68 65 20 6c 65 67 61 63 79 20 78 50 72 6f 66  the legacy xProf
bd00: 69 6c 65 20 2a 2f 0a 23 65 6c 73 65 0a 23 64 65  ile */.#else.#de
bd10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43  fine SQLITE_TRAC
bd20: 45 5f 4c 45 47 41 43 59 20 20 20 20 20 20 20 20  E_LEGACY        
bd30: 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
bd40: 54 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c  TE_TRACE_XPROFIL
bd50: 45 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69  E        0.#endi
bd60: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
bd70: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 23  _DEPRECATED */.#
bd80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
bd90: 41 43 45 5f 4e 4f 4e 4c 45 47 41 43 59 5f 4d 41  ACE_NONLEGACY_MA
bda0: 53 4b 20 20 30 78 30 66 20 20 20 20 20 2f 2a 20  SK  0x0f     /* 
bdb0: 4e 6f 72 6d 61 6c 20 66 6c 61 67 73 20 2a 2f 0a  Normal flags */.
bdc0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
bdd0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
bde0: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
bdf0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
be00: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
be10: 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a  truct sqlite3 {.
be20: 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70    sqlite3_vfs *p
be30: 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Vfs;            
be40: 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20  /* OS Interface 
be50: 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65  */.  struct Vdbe
be60: 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
be70: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
be80: 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63  tive virtual mac
be90: 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53  hines */.  CollS
bea0: 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20  eq *pDfltColl;  
beb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
bec0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
bed0: 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41  g sequence (BINA
bee0: 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  RY) */.  sqlite3
bef0: 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20  _mutex *mutex;  
bf00: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
bf10: 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20  tion mutex */.  
bf20: 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20  Db *aDb;        
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bf40: 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f   All backends */
bf50: 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20  .  int nDb;     
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61   /* Number of ba
bf80: 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79  ckends currently
bf90: 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32   in use */.  u32
bfa0: 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20   mDbFlags;      
bfb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c             /* fl
bfc0: 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e  ags recording in
bfd0: 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a  ternal state */.
bfe0: 20 20 75 36 34 20 66 6c 61 67 73 3b 20 20 20 20    u64 flags;    
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c000: 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c  /* flags settabl
c010: 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65  e by pragmas. Se
c020: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  e below */.  i64
c030: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
c040: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f             /* RO
c050: 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65  WID of most rece
c060: 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61  nt insert (see a
c070: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73  bove) */.  i64 s
c080: 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
c090: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
c0a0: 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65  ult mmap_size se
c0b0: 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e  tting */.  u32 n
c0c0: 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20  SchemaLock;     
c0d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
c0e0: 6f 74 20 72 65 73 65 74 20 74 68 65 20 73 63 68  ot reset the sch
c0f0: 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72  ema when non-zer
c100: 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  o */.  unsigned 
c110: 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20  int openFlags;  
c120: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61       /* Flags pa
c130: 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f  ssed to sqlite3_
c140: 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20  vfs.xOpen() */. 
c150: 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20   int errCode;   
c160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c170: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
c180: 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45  ror code (SQLITE
c190: 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  _*) */.  int err
c1a0: 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Mask;           
c1b0: 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75         /* & resu
c1c0: 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68  lt codes with th
c1d0: 69 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  is before return
c1e0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79  ing */.  int iSy
c1f0: 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20  sErrno;         
c200: 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20         /* Errno 
c210: 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20  value from last 
c220: 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a  system error */.
c230: 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73    u16 dbOptFlags
c240: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c250: 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62  /* Flags to enab
c260: 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d  le/disable optim
c270: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  izations */.  u8
c280: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
c290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
c2a0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ext encoding */.
c2b0: 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b    u8 autoCommit;
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2d0: 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d  /* The auto-comm
c2e0: 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38  it flag. */.  u8
c2f0: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20   temp_store;    
c300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
c310: 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79  : file 2: memory
c320: 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20   0: default */. 
c330: 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64   u8 mallocFailed
c340: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
c350: 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76  * True if we hav
c360: 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20  e seen a malloc 
c370: 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20  failure */.  u8 
c380: 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20  bBenignMalloc;  
c390: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
c3a0: 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d   not require OOM
c3b0: 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  s if true */.  u
c3c0: 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20  8 dfltLockMode; 
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c3e0: 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d  Default locking-
c3f0: 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65  mode for attache
c400: 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65  d dbs */.  signe
c410: 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76  d char nextAutov
c420: 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f  ac;      /* Auto
c430: 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65  vac setting afte
c440: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20  r VACUUM if >=0 
c450: 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73  */.  u8 suppress
c460: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
c470: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73     /* Do not iss
c480: 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ue error message
c490: 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  s if true */.  u
c4a0: 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  8 vtabOnConflict
c4b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c4c0: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
c4d0: 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63  for s3_vtab_on_c
c4e0: 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75  onflict() */.  u
c4f0: 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  8 isTransactionS
c500: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20  avepoint;    /* 
c510: 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65  True if the oute
c520: 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20  rmost savepoint 
c530: 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20  is a TS */.  u8 
c540: 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20 20 20  mTrace;         
c550: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65             /* ze
c560: 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54  ro or more SQLIT
c570: 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f  E_TRACE flags */
c580: 0a 20 20 75 38 20 6e 6f 53 68 61 72 65 64 43 61  .  u8 noSharedCa
c590: 63 68 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  che;            
c5a0: 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73   /* True if no s
c5b0: 68 61 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b  hared-cache back
c5c0: 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71  ends */.  u8 nSq
c5d0: 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20  lExec;          
c5e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c5f0: 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f  r of pending OP_
c600: 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20  SqlExec opcodes 
c610: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
c620: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
c630: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
c640: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
c650: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
c660: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c670: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
c680: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
c690: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
c6a0: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
c6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6c0: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
c6d0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
c6e0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
c6f0: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
c700: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
c710: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
c720: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
c730: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
c740: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
c750: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
c760: 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  imits */.  int n
c770: 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20  MaxSorterMmap;  
c780: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
c790: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69  mum size of regi
c7a0: 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f  ons mapped by so
c7b0: 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74  rter */.  struct
c7c0: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
c7d0: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
c7e0: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
c7f0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
c800: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
c810: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
c820: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
c830: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
c840: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
c850: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c870: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
c880: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
c890: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
c8a0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
c8b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
c8c0: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
c8d0: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
c8e0: 20 75 6e 73 69 67 6e 65 64 20 6f 72 70 68 61 6e   unsigned orphan
c8f0: 54 72 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a 20  Trigger : 1; /* 
c900: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
c910: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
c920: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75  trigger */.    u
c930: 6e 73 69 67 6e 65 64 20 69 6d 70 6f 73 74 65 72  nsigned imposter
c940: 54 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42 75  Table : 1; /* Bu
c950: 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74  ilding an impost
c960: 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  er table */.    
c970: 75 6e 73 69 67 6e 65 64 20 72 65 6f 70 65 6e 4d  unsigned reopenM
c980: 65 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20 41  emdb : 1;   /* A
c990: 54 54 41 43 48 20 69 73 20 72 65 61 6c 6c 79 20  TTACH is really 
c9a0: 61 20 72 65 6f 70 65 6e 20 75 73 69 6e 67 20 4d  a reopen using M
c9b0: 65 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  emDB */.  } init
c9c0: 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74  ;.  int nVdbeAct
c9d0: 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ive;            
c9e0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
c9f0: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72  DBEs currently r
ca00: 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  unning */.  int 
ca10: 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20  nVdbeRead;      
ca20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ca30: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
ca40: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72  BEs that read or
ca50: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
ca60: 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20  nVdbeWrite;     
ca70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ca80: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
ca90: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e  BEs that read an
caa0: 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  d write */.  int
cab0: 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20   nVdbeExec;     
cac0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
cad0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
cae0: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
caf0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65  () */.  int nVDe
cb00: 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20  stroy;          
cb10: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
cb20: 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65  of active OP_VDe
cb30: 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
cb40: 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e   */.  int nExten
cb50: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
cb60: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
cb70: 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f   loaded extensio
cb80: 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61  ns */.  void **a
cb90: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
cba0: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
cbb0: 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  f shared library
cbc0: 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e   handles */.  in
cbd0: 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c  t (*xTrace)(u32,
cbe0: 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64  void*,void*,void
cbf0: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65  *);     /* Trace
cc00: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
cc10: 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20  oid *pTraceArg; 
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc30: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
cc40: 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63  ment to the trac
cc50: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 69  e function */.#i
cc60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cc70: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20 20 76  T_DEPRECATED.  v
cc80: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
cc90: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
cca0: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
ccb0: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
ccc0: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
ccd0: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ccf0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
cd00: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
cd10: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 20 2a  .#endif.  void *
cd20: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
cd40: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
cd50: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  itCallback() */.
cd60: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
cd70: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
cd80: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
cd90: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
cda0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
cdb0: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
cdc0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
cdd0: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
cde0: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76  allback() */.  v
cdf0: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
ce00: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
ce10: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
ce20: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
ce30: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
ce40: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
ce50: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
ce60: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
ce70: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
ce80: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
ce90: 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ceb0: 2f 2a 20 43 75 72 72 65 6e 74 20 70 61 72 73 65  /* Current parse
cec0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
ced0: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
cee0: 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a  TE_HOOK.  void *
cef0: 70 50 72 65 55 70 64 61 74 65 41 72 67 3b 20 20  pPreUpdateArg;  
cf00: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
cf10: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50 72   argument to xPr
cf20: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
cf30: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 65  */.  void (*xPre
cf40: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
cf50: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65 64     /* Registered
cf60: 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70   using sqlite3_p
cf70: 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20  reupdate_hook() 
cf80: 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c  */.    void*,sql
cf90: 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63  ite3*,int,char c
cfa0: 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74  onst*,char const
cfb0: 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c  *,sqlite3_int64,
cfc0: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20 20  sqlite3_int64.  
cfd0: 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a  );.  PreUpdate *
cfe0: 70 50 72 65 55 70 64 61 74 65 3b 20 20 20 20 20  pPreUpdate;     
cff0: 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f     /* Context fo
d000: 72 20 61 63 74 69 76 65 20 70 72 65 2d 75 70 64  r active pre-upd
d010: 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ate callback */.
d020: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
d030: 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
d040: 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65  E_HOOK */.#ifnde
d050: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
d060: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
d070: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
d080: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
d090: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
d0a0: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
d0b0: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
d0c0: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
d0d0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
d0e0: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
d0f0: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
d100: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
d110: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
d120: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
d130: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
d140: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
d150: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
d160: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
d170: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
d180: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
d190: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
d1a0: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
d1b0: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
d1c0: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
d1d0: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
d1e0: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
d1f0: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
d200: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
d210: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
d220: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
d230: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
d240: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
d250: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
d260: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
d270: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
d280: 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78  TION.  sqlite3_x
d290: 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20  auth xAuth;     
d2a0: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
d2b0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
d2c0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
d2d0: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
d2e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
d2f0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
d300: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
d310: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
d320: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d330: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
d340: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
d350: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
d360: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
d370: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
d380: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
d390: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
d3a0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
d3b0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
d3c0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
d3d0: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
d3e0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
d3f0: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
d400: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
d410: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
d420: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d430: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
d440: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d460: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
d470: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
d480: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d4a0: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
d4b0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
d4c0: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
d4d0: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
d4e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
d4f0: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
d500: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
d510: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
d520: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
d530: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
d540: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
d550: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
d560: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
d570: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20  sconnect;       
d580: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
d590: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
d5a0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
d5b0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73   */.#endif.  Has
d5c0: 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20  h aFunc;        
d5d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
d5e0: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
d5f0: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
d600: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
d610: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
d620: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
d630: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
d640: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
d650: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
d660: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
d670: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
d680: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
d690: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
d6a0: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
d6b0: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
d6c0: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
d6d0: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
d6e0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
d6f0: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
d700: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
d710: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
d720: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
d730: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
d740: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
d750: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
d760: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d770: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
d780: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
d790: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
d7a0: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
d7b0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
d7c0: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
d7d0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
d7e0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
d7f0: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
d800: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
d810: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
d820: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
d830: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
d840: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
d850: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
d860: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
d870: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
d880: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
d890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
d8a0: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
d8b0: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
d8c0: 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66  Free() */.#ifdef
d8d0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
d8e0: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
d8f0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
d900: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
d910: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
d920: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
d930: 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74  .  ** mutex, not
d940: 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65   by sqlite3.mute
d950: 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64  x. They are used
d960: 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69   by code in noti
d970: 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  fy.c..  **.  ** 
d980: 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f  When X.pUnlockCo
d990: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
d9a0: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69  t means that X i
d9b0: 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20  s waiting for Y 
d9c0: 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73  to.  ** unlock s
d9d0: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72  o that it can pr
d9e0: 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  oceed..  **.  **
d9f0: 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e   When X.pBlockin
da00: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  gConnection==Y, 
da10: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
da20: 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58  something that X
da30: 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65   tried.  ** trie
da40: 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79  d to do recently
da50: 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20   failed with an 
da60: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72  SQLITE_LOCKED er
da70: 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73  ror due to locks
da80: 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e  .  ** held by Y.
da90: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  .  */.  sqlite3 
daa0: 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  *pBlockingConnec
dab0: 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74  tion; /* Connect
dac0: 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20  ion that caused 
dad0: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f  SQLITE_LOCKED */
dae0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c  .  sqlite3 *pUnl
daf0: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20  ockConnection;  
db00: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
db10: 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20  ection to watch 
db20: 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20  for unlock */.  
db30: 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67  void *pUnlockArg
db40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
db50: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
db60: 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69  t to xUnlockNoti
db70: 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  fy */.  void (*x
db80: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f  UnlockNotify)(vo
db90: 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a  id **, int);  /*
dba0: 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63   Unlock notify c
dbb0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c  allback */.  sql
dbc0: 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b  ite3 *pNextBlock
dbd0: 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  ed;        /* Ne
dbe0: 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c  xt in list of al
dbf0: 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63  l blocked connec
dc00: 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
dc10: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
dc20: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
dc30: 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72  N.  sqlite3_user
dc40: 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20  auth auth;      
dc50: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
dc60: 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  tication informa
dc70: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  tion */.#endif.}
dc80: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f  ;../*.** A macro
dc90: 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65   to discover the
dca0: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64   encoding of a d
dcb0: 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66  atabase..*/.#def
dcc0: 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64  ine SCHEMA_ENC(d
dcd0: 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d  b) ((db)->aDb[0]
dce0: 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23  .pSchema->enc).#
dcf0: 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20  define ENC(db)  
dd00: 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63        ((db)->enc
dd10: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
dd20: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
dd30: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
dd40: 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
dd50: 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
dd60: 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
dd70: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
dd80: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d  FullFSync     ==
dd90: 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43   PAGER_FULLFSYNC
dda0: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
ddb0: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d  CkptFullFSync ==
ddc0: 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c   PAGER_CKPT_FULL
ddd0: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
dde0: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
ddf0: 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48     == PAGER_CACH
de00: 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69  E_SPILL.*/.#defi
de10: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
de20: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
de30: 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  001  /* OK to up
de40: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
de50: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
de60: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
de70: 6d 74 20 20 30 78 30 30 30 30 30 30 30 32 20 20  mt  0x00000002  
de80: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
de90: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
dea0: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
deb0: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
dec0: 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20  es   0x00000004 
ded0: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
dee0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
def0: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
df00: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
df10: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38        0x00000008
df20: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
df30: 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65  ync on the backe
df40: 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nd */.#define SQ
df50: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
df60: 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20  nc  0x00000010  
df70: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
df80: 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  c for checkpoint
df90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dfa0: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20  TE_CacheSpill   
dfb0: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
dfc0: 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67   OK to spill pag
dfd0: 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  er cache */.#def
dfe0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
dff0: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
e000: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
e010: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
e020: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e030: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
e040: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
e050: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
e060: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
e070: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e0a0: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
e0b0: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
e0c0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
e0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
e0f0: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
e100: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
e110: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
e120: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
e130: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
e140: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
e150: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
e160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e180: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
e190: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
e1a0: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
e1b0: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
e1c0: 73 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20  s   0x00000200  
e1d0: 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63  /* Do not enforc
e1e0: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
e1f0: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
e200: 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
e210: 69 74 20 20 20 30 78 30 30 30 30 30 34 30 30 20  it   0x00000400 
e220: 20 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d 4d 49   /* READ UNCOMMI
e230: 54 54 45 44 20 69 6e 20 73 68 61 72 65 64 2d 63  TTED in shared-c
e240: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
e250: 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43  SQLITE_NoCkptOnC
e260: 6c 6f 73 65 20 20 30 78 30 30 30 30 30 38 30 30  lose  0x00000800
e270: 20 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69    /* No checkpoi
e280: 6e 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45  nt on close()/DE
e290: 54 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e 65 20  TACH */.#define 
e2a0: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
e2b0: 64 65 72 20 20 20 30 78 30 30 30 30 31 30 30 30  der   0x00001000
e2c0: 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f    /* Reverse uno
e2d0: 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a  rdered SELECTs *
e2e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e2f0: 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20  _RecTriggers    
e300: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 45  0x00002000  /* E
e310: 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20  nable recursive 
e320: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
e330: 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69  ine SQLITE_Forei
e340: 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 30  gnKeys    0x0000
e350: 34 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65  4000  /* Enforce
e360: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
e370: 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65  straints  */.#de
e380: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f  fine SQLITE_Auto
e390: 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 30  Index      0x000
e3a0: 30 38 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  08000  /* Enable
e3b0: 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
e3c0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e3d0: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
e3e0: 6f 6e 20 20 30 78 30 30 30 31 30 30 30 30 20 20  on  0x00010000  
e3f0: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
e400: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
e410: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
e420: 78 74 46 75 6e 63 20 20 20 20 30 78 30 30 30 32  xtFunc    0x0002
e430: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
e440: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
e450: 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65   SQL func */.#de
e460: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
e470: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30 30  leTrigger  0x000
e480: 34 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  40000  /* True t
e490: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
e4a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e4b0: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
e4c0: 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f     0x00080000  /
e4d0: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
e4e0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
e4f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
e500: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 30  ryOnly      0x00
e510: 31 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  100000  /* Disab
e520: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
e530: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
e540: 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b  QLITE_CellSizeCk
e550: 20 20 20 20 20 30 78 30 30 32 30 30 30 30 30 20       0x00200000 
e560: 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20   /* Check btree 
e570: 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f  cell sizes on lo
e580: 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ad */.#define SQ
e590: 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a  LITE_Fts3Tokeniz
e5a0: 65 72 20 20 30 78 30 30 34 30 30 30 30 30 20 20  er  0x00400000  
e5b0: 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74  /* Enable fts3_t
e5c0: 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23  okenizer(2) */.#
e5d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
e5e0: 61 62 6c 65 51 50 53 47 20 20 20 20 20 30 78 30  ableQPSG     0x0
e5f0: 30 38 30 30 30 30 30 20 20 2f 2a 20 51 75 65 72  0800000  /* Quer
e600: 79 20 50 6c 61 6e 6e 65 72 20 53 74 61 62 69 6c  y Planner Stabil
e610: 69 74 79 20 47 75 61 72 61 6e 74 65 65 2a 2f 0a  ity Guarantee*/.
e620: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
e630: 72 69 67 67 65 72 45 51 50 20 20 20 20 20 30 78  riggerEQP     0x
e640: 30 31 30 30 30 30 30 30 20 20 2f 2a 20 53 68 6f  01000000  /* Sho
e650: 77 20 74 72 69 67 67 65 72 20 45 58 50 4c 41 49  w trigger EXPLAI
e660: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
e670: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
e680: 65 73 65 74 44 61 74 61 62 61 73 65 20 20 30 78  esetDatabase  0x
e690: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 52 65 73  02000000  /* Res
e6a0: 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
e6b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e6c0: 45 5f 4c 65 67 61 63 79 41 6c 74 65 72 20 20 20  E_LegacyAlter   
e6d0: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
e6e0: 4c 65 67 61 63 79 20 41 4c 54 45 52 20 54 41 42  Legacy ALTER TAB
e6f0: 4c 45 20 62 65 68 61 76 69 6f 75 72 20 2a 2f 0a  LE behaviour */.
e700: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
e710: 6f 53 63 68 65 6d 61 45 72 72 6f 72 20 20 30 78  oSchemaError  0x
e720: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44 6f 20  08000000  /* Do 
e730: 6e 6f 74 20 72 65 70 6f 72 74 20 73 63 68 65 6d  not report schem
e740: 61 20 70 61 72 73 65 20 65 72 72 6f 72 73 2a 2f  a parse errors*/
e750: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e760: 44 65 66 65 6e 73 69 76 65 20 20 20 20 20 20 30  Defensive      0
e770: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 49 6e  x10000000  /* In
e780: 70 75 74 20 53 51 4c 20 69 73 20 6c 69 6b 65 6c  put SQL is likel
e790: 79 20 68 6f 73 74 69 6c 65 20 2a 2f 0a 0a 2f 2a  y hostile */../*
e7a0: 20 46 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c 79   Flags used only
e7b0: 20 69 66 20 64 65 62 75 67 67 69 6e 67 20 2a 2f   if debugging */
e7c0: 0a 23 64 65 66 69 6e 65 20 48 49 28 58 29 20 20  .#define HI(X)  
e7d0: 28 28 75 36 34 29 28 58 29 3c 3c 33 32 29 0a 23  ((u64)(X)<<32).#
e7e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
e7f0: 55 47 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  UG.#define SQLIT
e800: 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20  E_SqlTrace      
e810: 20 48 49 28 30 78 30 30 30 31 29 20 20 2f 2a 20   HI(0x0001)  /* 
e820: 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20  Debug print SQL 
e830: 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a  as it executes *
e840: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e850: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20  _VdbeListing    
e860: 48 49 28 30 78 30 30 30 32 29 20 20 2f 2a 20 44  HI(0x0002)  /* D
e870: 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66  ebug listings of
e880: 20 56 44 42 45 20 70 72 6f 67 73 20 2a 2f 0a 23   VDBE progs */.#
e890: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e8a0: 62 65 54 72 61 63 65 20 20 20 20 20 20 48 49 28  beTrace      HI(
e8b0: 30 78 30 30 30 34 29 20 20 2f 2a 20 54 72 75 65  0x0004)  /* True
e8c0: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
e8d0: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
e8e0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
e8f0: 64 64 6f 70 54 72 61 63 65 20 48 49 28 30 78 30  ddopTrace HI(0x0
e900: 30 30 38 29 20 20 2f 2a 20 54 72 61 63 65 20 73  008)  /* Trace s
e910: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
e920: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
e930: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ne SQLITE_VdbeEQ
e940: 50 20 20 20 20 20 20 20 20 48 49 28 30 78 30 30  P        HI(0x00
e950: 31 30 29 20 20 2f 2a 20 44 65 62 75 67 20 45 58  10)  /* Debug EX
e960: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e970: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e980: 54 45 5f 50 61 72 73 65 72 54 72 61 63 65 20 20  TE_ParserTrace  
e990: 20 20 48 49 28 30 78 30 30 32 30 29 20 20 2f 2a    HI(0x0020)  /*
e9a0: 20 50 52 41 47 4d 41 20 70 61 72 73 65 72 5f 74   PRAGMA parser_t
e9b0: 72 61 63 65 3d 4f 4e 20 2a 2f 0a 23 65 6e 64 69  race=ON */.#endi
e9c0: 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  f../*.** Allowed
e9d0: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
e9e0: 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a  te3.mDbFlags.*/.
e9f0: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53  #define DBFLAG_S
ea00: 63 68 65 6d 61 43 68 61 6e 67 65 20 20 20 30 78  chemaChange   0x
ea10: 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69  0001  /* Uncommi
ea20: 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20  tted Hash table 
ea30: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
ea40: 6e 65 20 44 42 46 4c 41 47 5f 50 72 65 66 65 72  ne DBFLAG_Prefer
ea50: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 30 32 20  Builtin  0x0002 
ea60: 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74   /* Preference t
ea70: 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73  o built-in funcs
ea80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c   */.#define DBFL
ea90: 41 47 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20  AG_Vacuum       
eaa0: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 43 75 72    0x0004  /* Cur
eab0: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
eac0: 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  UM */.#define DB
ead0: 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e  FLAG_SchemaKnown
eae0: 4f 6b 20 20 30 78 30 30 30 38 20 20 2f 2a 20 53  Ok  0x0008  /* S
eaf0: 63 68 65 6d 61 20 69 73 20 6b 6e 6f 77 6e 20 74  chema is known t
eb00: 6f 20 62 65 20 76 61 6c 69 64 20 2a 2f 0a 0a 2f  o be valid */../
eb10: 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65  *.** Bits of the
eb20: 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c   sqlite3.dbOptFl
eb30: 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61  ags field that a
eb40: 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a  re used by the.*
eb50: 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
eb60: 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45  ontrol(SQLITE_TE
eb70: 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54  STCTRL_OPTIMIZAT
eb80: 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66  IONS,...) interf
eb90: 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74  ace to.** select
eba0: 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61  ively disable va
ebb0: 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
ebc0: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
ebd0: 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74  SQLITE_QueryFlat
ebe0: 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f  tener 0x0001   /
ebf0: 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69  * Query flatteni
ec00: 6e 67 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ng */.          
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec20: 2f 2a 20 20 30 78 30 30 30 32 20 20 20 61 76 61  /*  0x0002   ava
ec30: 69 6c 61 62 6c 65 20 66 6f 72 20 72 65 75 73 65  ilable for reuse
ec40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ec50: 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20  TE_GroupByOrder 
ec60: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52    0x0004   /* GR
ec70: 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f  OUPBY cover of O
ec80: 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e  RDERBY */.#defin
ec90: 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f  e SQLITE_FactorO
eca0: 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20  utConst 0x0008  
ecb0: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63   /* Constant fac
ecc0: 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  toring */.#defin
ecd0: 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63  e SQLITE_Distinc
ece0: 74 4f 70 74 20 20 20 20 30 78 30 30 31 30 20 20  tOpt    0x0010  
ecf0: 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69   /* DISTINCT usi
ed00: 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ng indexes */.#d
ed10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76  efine SQLITE_Cov
ed20: 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30  erIdxScan   0x00
ed30: 32 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67  20   /* Covering
ed40: 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a   index scans */.
ed50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
ed60: 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78  rderByIdxJoin 0x
ed70: 30 30 34 30 20 20 20 2f 2a 20 4f 52 44 45 52 20  0040   /* ORDER 
ed80: 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20  BY of joins via 
ed90: 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
eda0: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
edb0: 76 65 20 20 20 20 20 30 78 30 30 38 30 20 20 20  ve     0x0080   
edc0: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
edd0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
ede0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
edf0: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 31 30  NoopJoin   0x010
ee00: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
ee10: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
ee20: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
ee30: 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77  LITE_CountOfView
ee40: 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20      0x0200   /* 
ee50: 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65  The count-of-vie
ee60: 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  w optimization *
ee70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ee80: 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20  _CursorHints    
ee90: 30 78 30 34 30 30 20 20 20 2f 2a 20 41 64 64 20  0x0400   /* Add 
eea0: 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70  OP_CursorHint op
eeb0: 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  codes */.#define
eec0: 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20   SQLITE_Stat34  
eed0: 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20         0x0800   
eee0: 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20  /* Use STAT3 or 
eef0: 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 20 20  STAT4 data */.  
ef00: 20 2f 2a 20 54 48 33 20 65 78 70 65 63 74 73 20   /* TH3 expects 
ef10: 74 68 65 20 53 74 61 74 33 34 20 20 5e 5e 5e 5e  the Stat34  ^^^^
ef20: 5e 5e 20 76 61 6c 75 65 20 74 6f 20 62 65 20 30  ^^ value to be 0
ef30: 78 30 38 30 30 2e 20 20 44 6f 6e 27 74 20 63 68  x0800.  Don't ch
ef40: 61 6e 67 65 20 69 74 20 2a 2f 0a 23 64 65 66 69  ange it */.#defi
ef50: 6e 65 20 53 51 4c 49 54 45 5f 50 75 73 68 44 6f  ne SQLITE_PushDo
ef60: 77 6e 20 20 20 20 20 20 20 30 78 31 30 30 30 20  wn       0x1000 
ef70: 20 20 2f 2a 20 54 68 65 20 70 75 73 68 2d 64 6f    /* The push-do
ef80: 77 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  wn optimization 
ef90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
efa0: 45 5f 53 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20  E_SimplifyJoin  
efb0: 20 30 78 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e   0x2000   /* Con
efc0: 76 65 72 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74  vert LEFT JOIN t
efd0: 6f 20 4a 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e  o JOIN */.#defin
efe0: 65 20 53 51 4c 49 54 45 5f 53 6b 69 70 53 63 61  e SQLITE_SkipSca
eff0: 6e 20 20 20 20 20 20 20 30 78 34 30 30 30 20 20  n       0x4000  
f000: 20 2f 2a 20 53 6b 69 70 2d 73 63 61 6e 73 20 2a   /* Skip-scans *
f010: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f020: 5f 50 72 6f 70 61 67 61 74 65 43 6f 6e 73 74 20  _PropagateConst 
f030: 30 78 38 30 30 30 20 20 20 2f 2a 20 54 68 65 20  0x8000   /* The 
f040: 63 6f 6e 73 74 61 6e 74 20 70 72 6f 70 61 67 61  constant propaga
f050: 74 69 6f 6e 20 6f 70 74 20 2a 2f 0a 23 64 65 66  tion opt */.#def
f060: 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70  ine SQLITE_AllOp
f070: 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66  ts        0xffff
f080: 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69     /* All optimi
f090: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  zations */../*.*
f0a0: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73  * Macros for tes
f0b0: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
f0c0: 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  not optimization
f0d0: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72  s are enabled or
f0e0: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64   disabled..*/.#d
f0f0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
f100: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
f110: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
f120: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
f130: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
f140: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
f150: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
f160: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
f170: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a  (mask))==0)../*.
f180: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
f190: 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f  f it OK to facto
f1a0: 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  r constant expre
f1b0: 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20  ssions into the 
f1c0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
f1d0: 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75  * code. The argu
f1e0: 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20  ment is a Parse 
f1f0: 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63  object for the c
f200: 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a  ode generator..*
f210: 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46  /.#define ConstF
f220: 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d  actorOk(P) ((P)-
f230: 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a  >okConstFactor).
f240: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
f250: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
f260: 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c  qlite.magic fiel
f270: 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  d..** The number
f280: 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61  s are obtained a
f290: 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76  t random and hav
f2a0: 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61  e no special mea
f2b0: 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74  ning, other.** t
f2c0: 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e  han being distin
f2d0: 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74  ct from one anot
f2e0: 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
f2f0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
f300: 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37  N     0xa029a697
f310: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
f320: 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   open */.#define
f330: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
f340: 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33  OSED   0x9f3c2d3
f350: 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  3  /* Database i
f360: 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66  s closed */.#def
f370: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f380: 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37  _SICK     0x4b77
f390: 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61  1290  /* Error a
f3a0: 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73  nd awaiting clos
f3b0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
f3c0: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20  ITE_MAGIC_BUSY  
f3d0: 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f     0xf03b7906  /
f3e0: 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65  * Database curre
f3f0: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23  ntly in use */.#
f400: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
f410: 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62  GIC_ERROR    0xb
f420: 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53  5357930  /* An S
f430: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72  QLITE_MISUSE err
f440: 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23  or occurred */.#
f450: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
f460: 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36  GIC_ZOMBIE   0x6
f470: 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73  4cffc7f  /* Clos
f480: 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74  e with last stat
f490: 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a  ement close */..
f4a0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66  /*.** Each SQL f
f4b0: 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e  unction is defin
f4c0: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
f4d0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
f4e0: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
f4f0: 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69    For global bui
f500: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
f510: 28 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d  (ex: substr(), m
f520: 61 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a  ax(), count()).*
f530: 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * a pointer to t
f540: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
f550: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c   held in the sql
f560: 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74  ite3BuiltinFunct
f570: 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ions object..** 
f580: 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69  For per-connecti
f590: 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  on application-d
f5a0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
f5b0: 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  , a pointer to t
f5c0: 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
f5d0: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
f5e0: 64 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74  db->aHash hash t
f5f0: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  able..**.** The 
f600: 75 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69 73  u.pHash field is
f610: 20 75 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f   used by the glo
f620: 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20  bal built-ins.  
f630: 54 68 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f  The u.pDestructo
f640: 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73  r.** field is us
f650: 65 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63  ed by per-connec
f660: 74 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e  tion app-def fun
f670: 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctions..*/.struc
f680: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38  t FuncDef {.  i8
f690: 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
f6a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f6b0: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
f6c0: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
f6d0: 2f 0a 20 20 75 33 32 20 66 75 6e 63 46 6c 61 67  /.  u32 funcFlag
f6e0: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
f6f0: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
f700: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
f710: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
f720: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
f730: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
f740: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
f750: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
f760: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
f770: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
f780: 69 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c  id (*xSFunc)(sql
f790: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
f7a0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
f7b0: 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61  *); /* func or a
f7c0: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69  gg-step */.  voi
f7d0: 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73  d (*xFinalize)(s
f7e0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
f7f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f800: 20 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69     /* Agg finali
f810: 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  zer */.  void (*
f820: 78 56 61 6c 75 65 29 28 73 71 6c 69 74 65 33 5f  xValue)(sqlite3_
f830: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f850: 2a 20 43 75 72 72 65 6e 74 20 61 67 67 20 76 61  * Current agg va
f860: 6c 75 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  lue */.  void (*
f870: 78 49 6e 76 65 72 73 65 29 28 73 71 6c 69 74 65  xInverse)(sqlite
f880: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
f890: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
f8a0: 20 2f 2a 20 69 6e 76 65 72 73 65 20 61 67 67 2d   /* inverse agg-
f8b0: 73 74 65 70 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  step */.  const 
f8c0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f  char *zName;   /
f8d0: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
f8e0: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
f8f0: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e   union {.    Fun
f900: 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20  cDef *pHash;    
f910: 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61    /* Next with a
f920: 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
f930: 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73  but the same has
f940: 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73  h */.    FuncDes
f950: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
f960: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
f970: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
f980: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
f990: 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
f9a0: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
f9b0: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
f9c0: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
f9d0: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
f9e0: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
f9f0: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
fa00: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
fa10: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
fa20: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
fa30: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
fa40: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
fa50: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
fa60: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
fa70: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
fa80: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
fa90: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
faa0: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
fab0: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
fac0: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
fad0: 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20  mber of FuncDef 
fae0: 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20  objects created 
faf0: 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20  (either 1 or 3, 
fb00: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
fb10: 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74  ther.** or not t
fb20: 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63  he specified enc
fb30: 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f  oding is SQLITE_
fb40: 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65  ANY). The FuncDe
fb50: 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  f.pDestructor.**
fb60: 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20   member of each 
fb70: 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44  of the new FuncD
fb80: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65  ef objects is se
fb90: 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  t to point to th
fba0: 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46  e allocated.** F
fbb0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a  uncDestructor..*
fbc0: 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c  *.** Thereafter,
fbd0: 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65   when one of the
fbe0: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
fbf0: 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65   is deleted, the
fc00: 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f   reference.** co
fc10: 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65  unt on this obje
fc20: 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65  ct is decremente
fc30: 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68  d. When it reach
fc40: 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75  es 0, the destru
fc50: 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b  ctor.** is invok
fc60: 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44  ed and the FuncD
fc70: 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74  estructor struct
fc80: 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74  ure freed..*/.st
fc90: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
fca0: 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66  tor {.  int nRef
fcb0: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  ;.  void (*xDest
fcc0: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20  roy)(void *);.  
fcd0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
fce0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  .};../*.** Possi
fcf0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46  ble values for F
fd00: 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e  uncDef.flags.  N
fd10: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45  ote that the _LE
fd20: 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46  NGTH and _TYPEOF
fd30: 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20  .** values must 
fd40: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50  correspond to OP
fd50: 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
fd60: 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
fd70: 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c  ARG.  And.** SQL
fd80: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fd90: 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  T must be the sa
fda0: 6d 65 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54  me as SQLITE_DET
fdb0: 45 52 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65  ERMINISTIC.  The
fdc0: 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74  re.** are assert
fdd0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  () statements in
fde0: 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72   the code to ver
fdf0: 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20  ify this..**.** 
fe00: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
fe10: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
fe20: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
fe30: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49    SQLITE_FUNC_MI
fe40: 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d  NMAX    ==  NC_M
fe50: 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 3d 3d  inMaxAgg      ==
fe60: 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a   SF_MinMaxAgg.**
fe70: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
fe80: 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f  _LENGTH    ==  O
fe90: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a  PFLAG_LENGTHARG.
fea0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
feb0: 4e 43 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d 20  NC_TYPEOF    == 
fec0: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
fed0: 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  G.**     SQLITE_
fee0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d  FUNC_CONSTANT  =
fef0: 3d 20 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  =  SQLITE_DETERM
ff00: 49 4e 49 53 54 49 43 20 66 72 6f 6d 20 74 68 65  INISTIC from the
ff10: 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49   API.**     SQLI
ff20: 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20  TE_FUNC_ENCMASK 
ff30: 20 20 64 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c    depends on SQL
ff40: 49 54 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20  ITE_UTF* macros 
ff50: 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64  in the API.*/.#d
ff60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ff70: 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30  C_ENCMASK  0x000
ff80: 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38  3 /* SQLITE_UTF8
ff90: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
ffa0: 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23   or UTF16LE */.#
ffb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ffc0: 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30  NC_LIKE     0x00
ffd0: 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  04 /* Candidate 
ffe0: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
fff0: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
10000 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10010 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 30 38  _CASE     0x0008
10020 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69   /* Case-sensiti
10030 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e  ve LIKE-type fun
10040 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
10050 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48   SQLITE_FUNC_EPH
10060 45 4d 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20  EM    0x0010 /* 
10070 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
10080 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
10090 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
100a0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
100b0 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  020 /* sqlite3Ge
100c0 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
100d0 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f  ight be called*/
100e0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
100f0 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
10100 30 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0040 /* Built-in
10110 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69   length() functi
10120 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
10130 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
10140 20 20 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69     0x0080 /* Bui
10150 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66  lt-in typeof() f
10160 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
10170 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
10180 4f 55 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f  OUNT    0x0100 /
10190 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74  * Built-in count
101a0 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f  (*) aggregate */
101b0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
101c0 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78  FUNC_COALESCE 0x
101d0 30 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0200 /* Built-in
101e0 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69   coalesce() or i
101f0 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69  fnull() */.#defi
10200 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55  ne SQLITE_FUNC_U
10210 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f  NLIKELY 0x0400 /
10220 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b  * Built-in unlik
10230 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ely() function *
10240 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10250 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30  _FUNC_CONSTANT 0
10260 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e  x0800 /* Constan
10270 74 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20  t inputs give a 
10280 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20  constant output 
10290 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
102a0 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20  E_FUNC_MINMAX   
102b0 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66  0x1000 /* True f
102c0 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78  or min() and max
102d0 28 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f  () aggregates */
102e0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
102f0 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78  FUNC_SLOCHNG  0x
10300 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68  2000 /* "Slow Ch
10310 61 6e 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e  ange". Value con
10320 73 74 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20  stant during a. 
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10350 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65     ** single que
10360 72 79 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67  ry - might chang
10370 65 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23  e over time */.#
10380 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10390 4e 43 5f 41 46 46 49 4e 49 54 59 20 30 78 34 30  NC_AFFINITY 0x40
103a0 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61  00 /* Built-in a
103b0 66 66 69 6e 69 74 79 28 29 20 66 75 6e 63 74 69  ffinity() functi
103c0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
103d0 4c 49 54 45 5f 46 55 4e 43 5f 4f 46 46 53 45 54  LITE_FUNC_OFFSET
103e0 20 20 20 30 78 38 30 30 30 20 2f 2a 20 42 75 69     0x8000 /* Bui
103f0 6c 74 2d 69 6e 20 73 71 6c 69 74 65 5f 6f 66 66  lt-in sqlite_off
10400 73 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  set() function *
10410 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10420 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 20 20 20 30  _FUNC_WINDOW   0
10430 78 30 30 30 31 30 30 30 30 20 2f 2a 20 42 75 69  x00010000 /* Bui
10440 6c 74 2d 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c  lt-in window-onl
10450 79 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  y function */.#d
10460 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
10470 43 5f 57 49 4e 44 4f 57 5f 53 49 5a 45 20 30 78  C_WINDOW_SIZE 0x
10480 32 30 30 30 30 20 2f 2a 20 52 65 71 75 69 72 65  20000 /* Require
10490 73 20 70 61 72 74 69 74 69 6f 6e 20 73 69 7a 65  s partition size
104a0 20 61 73 20 61 72 67 2e 20 2a 2f 0a 23 64 65 66   as arg. */.#def
104b0 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
104c0 49 4e 54 45 52 4e 41 4c 20 30 78 30 30 30 34 30  INTERNAL 0x00040
104d0 30 30 30 20 2f 2a 20 46 6f 72 20 75 73 65 20 62  000 /* For use b
104e0 79 20 4e 65 73 74 65 64 50 61 72 73 65 28 29 20  y NestedParse() 
104f0 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  only */../*.** T
10500 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72  he following thr
10510 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54  ee macros, FUNCT
10520 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28  ION(), LIKEFUNC(
10530 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28  ) and AGGREGATE(
10540 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  ) are.** used to
10550 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74   create the init
10560 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65  ializers for the
10570 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
10580 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e  res..**.**   FUN
10590 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
105a0 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
105b0 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
105c0 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
105d0 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
105e0 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
105f0 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20  ction zName.**  
10600 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62     implemented b
10610 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75  y C function xFu
10620 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20  nc that accepts 
10630 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20  nArg arguments. 
10640 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65  The.**     value
10650 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20   passed as iArg 
10660 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
10670 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76  id*) and made av
10680 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61  ailable.**     a
10690 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20  s the user-data 
106a0 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
106b0 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75  ta()) for the fu
106c0 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20  nction. If.**   
106d0 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69    argument bNC i
106e0 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
106f0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
10700 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65  DCOLL flag is se
10710 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43  t..**.**   VFUNC
10720 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10730 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10740 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
10750 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
10760 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
10770 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10780 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  T flag..**.**   
10790 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  DFUNCTION(zName,
107a0 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
107b0 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
107c0 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
107d0 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
107e0 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
107f0 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a  NSTANT flag and.
10800 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68 65 20  **     adds the 
10810 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
10820 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20  HNG flag.  Used 
10830 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65 20  for date & time 
10840 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20  functions.**    
10850 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c   and functions l
10860 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69  ike sqlite_versi
10870 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63 68  on() that can ch
10880 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75  ange, but not du
10890 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69  ring.**     a si
108a0 6e 67 6c 65 20 71 75 65 72 79 2e 20 20 54 68 65  ngle query.  The
108b0 20 69 41 72 67 20 69 73 20 69 67 6e 6f 72 65 64   iArg is ignored
108c0 2e 20 20 54 68 65 20 75 73 65 72 2d 64 61 74 61  .  The user-data
108d0 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 0a 2a   is always set.*
108e0 2a 20 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20  *     to a NULL 
108f0 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e  pointer.  The bN
10900 43 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  C parameter is n
10910 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20  ot used..**.**  
10920 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65   PURE_DATE(zName
10930 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10940 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
10950 20 55 73 65 64 20 66 6f 72 20 22 70 75 72 65 22   Used for "pure"
10960 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74   date/time funct
10970 69 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63 72 6f  ions, this macro
10980 20 69 73 20 6c 69 6b 65 20 44 46 55 4e 43 54 49   is like DFUNCTI
10990 4f 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65 70 74  ON.**     except
109a0 20 74 68 61 74 20 69 74 20 64 6f 65 73 20 73 65   that it does se
109b0 74 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  t the SQLITE_FUN
109c0 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73  C_CONSTANT flags
109d0 2e 20 20 69 41 72 67 20 69 73 0a 2a 2a 20 20 20  .  iArg is.**   
109e0 20 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68    ignored and th
109f0 65 20 75 73 65 72 2d 64 61 74 61 20 66 6f 72 20  e user-data for 
10a00 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20  these functions 
10a10 69 73 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a  is set to an .**
10a20 20 20 20 20 20 61 72 62 69 74 72 61 72 79 20 6e       arbitrary n
10a30 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e  on-NULL pointer.
10a40 20 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65    The bNC parame
10a50 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  ter is not used.
10a60 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41  .**.**   AGGREGA
10a70 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
10a80 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70  iArg, bNC, xStep
10a90 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20  , xFinal).**    
10aa0 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
10ab0 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
10ac0 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
10ad0 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a   implemented by.
10ae0 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e  **     the C fun
10af0 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64  ctions xStep and
10b00 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72   xFinal. The fir
10b10 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65  st four paramete
10b20 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e  rs.**     are in
10b30 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65  terpreted in the
10b40 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65   same way as the
10b50 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74   first 4 paramet
10b60 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55  ers to.**     FU
10b70 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20  NCTION()..**.** 
10b80 20 20 57 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    WFUNCTION(zNam
10b90 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 78  e, nArg, iArg, x
10ba0 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56  Step, xFinal, xV
10bb0 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 29 0a  alue, xInverse).
10bc0 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10bd0 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61  reate an aggrega
10be0 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  te function defi
10bf0 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nition implement
10c00 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65  ed by.**     the
10c10 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74   C functions xSt
10c20 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54  ep and xFinal. T
10c30 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61  he first four pa
10c40 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20  rameters.**     
10c50 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
10c60 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
10c70 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70  as the first 4 p
10c80 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20  arameters to.** 
10c90 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a      FUNCTION()..
10ca0 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43  **.**   LIKEFUNC
10cb0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
10cc0 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20  rg, flags).**   
10cd0 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
10ce0 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
10cf0 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
10d00 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
10d10 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63  e.**     that ac
10d20 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
10d30 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c  ents and is impl
10d40 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c  emented by a cal
10d50 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75  l to C.**     fu
10d60 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e  nction likeFunc.
10d70 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69   Argument pArg i
10d80 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
10d90 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a  d *) and made.**
10da0 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61       available a
10db0 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75  s the function u
10dc0 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
10dd0 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20  3_user_data()). 
10de0 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44  The.**     FuncD
10df0 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c  ef.flags variabl
10e00 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
10e10 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
10e20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20  the flags.**    
10e30 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23   parameter..*/.#
10e40 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28  define FUNCTION(
10e50 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10e60 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
10e70 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10e80 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10e90 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10ea0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10eb0 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10ec0 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
10ed0 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
10ee0 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10ef0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56 46  {0} }.#define VF
10f00 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10f10 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10f20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10f30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  , SQLITE_UTF8|(b
10f40 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
10f50 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
10f60 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
10f70 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
10f80 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
10f90 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
10fa0 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   DFUNCTION(zName
10fb0 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10fc0 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
10fd0 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10fe0 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
10ff0 55 54 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c  UTF8, \.   0, 0,
11000 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
11010 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
11020 64 65 66 69 6e 65 20 50 55 52 45 5f 44 41 54 45  define PURE_DATE
11030 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
11040 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
11050 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
11060 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
11070 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54  QLITE_UTF8|SQLIT
11080 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c  E_FUNC_CONSTANT,
11090 20 5c 0a 20 20 20 28 76 6f 69 64 2a 29 26 73 71   \.   (void*)&sq
110a0 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20  lite3Config, 0, 
110b0 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
110c0 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
110d0 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28  efine FUNCTION2(
110e0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
110f0 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65  g, bNC, xFunc, e
11100 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
11110 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43  nArg,SQLITE_FUNC
11120 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
11130 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
11140 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
11150 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20  |extraFlags,\.  
11160 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
11170 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
11180 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
11190 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
111a0 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28  ne STR_FUNCTION(
111b0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
111c0 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
111d0 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
111e0 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
111f0 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
11200 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
11210 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c  OLL), \.   pArg,
11220 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
11230 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64   0, #zName, }.#d
11240 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a  efine LIKEFUNC(z
11250 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
11260 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72   flags) \.  {nAr
11270 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
11280 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
11290 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20  TF8|flags, \.   
112a0 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20  (void *)arg, 0, 
112b0 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20  likeFunc, 0, 0, 
112c0 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
112d0 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
112e0 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
112f0 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
11300 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 29 20  xFinal, xValue) 
11310 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
11320 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
11330 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
11340 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
11350 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
11360 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78  , xStep,xFinal,x
11370 56 61 6c 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c 20  Value,0,#zName, 
11380 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  {0}}.#define AGG
11390 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e  REGATE2(zName, n
113a0 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
113b0 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74  tep, xFinal, ext
113c0 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
113d0 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
113e0 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
113f0 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46  NEEDCOLL)|extraF
11400 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54  lags, \.   SQLIT
11410 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
11420 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  ), 0, xStep,xFin
11430 61 6c 2c 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e 61  al,xFinal,0,#zNa
11440 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65  me, {0}}.#define
11450 20 57 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d   WAGGREGATE(zNam
11460 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
11470 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c  , xStep, xFinal,
11480 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65 72 73   xValue, xInvers
11490 65 2c 20 66 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  e, f) \.  {nArg,
114a0 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
114b0 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
114c0 44 43 4f 4c 4c 29 7c 66 2c 20 5c 0a 20 20 20 53  DCOLL)|f, \.   S
114d0 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
114e0 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
114f0 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 78 49  xFinal,xValue,xI
11500 6e 76 65 72 73 65 2c 23 7a 4e 61 6d 65 2c 20 7b  nverse,#zName, {
11510 30 7d 7d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45  0}}.#define INTE
11520 52 4e 41 4c 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e  RNAL_FUNCTION(zN
11530 61 6d 65 2c 20 6e 41 72 67 2c 20 78 46 75 6e 63  ame, nArg, xFunc
11540 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
11550 49 54 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41  ITE_FUNC_INTERNA
11560 4c 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51  L|SQLITE_UTF8|SQ
11570 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
11580 4e 54 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78  NT, \.   0, 0, x
11590 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
115a0 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f  zName, {0} }.../
115b0 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
115c0 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
115d0 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
115e0 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
115f0 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
11600 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
11610 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
11620 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
11630 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
11640 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
11650 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
11660 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
11670 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
11680 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
11690 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
116a0 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
116b0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
116c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
116d0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
116e0 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
116f0 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
11700 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
11710 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
11720 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11730 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
11740 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36  olations */.  i6
11750 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
11760 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
11770 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
11780 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20  eferred imm fk. 
11790 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
117a0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
117b0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65           /* Pare
117c0 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66  nt savepoint (if
117d0 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   any) */.};../*.
117e0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
117f0 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
11800 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65   second paramete
11810 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65  r to sqlite3Save
11820 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20  point(),.** and 
11830 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  as the P1 argume
11840 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76  nt to the OP_Sav
11850 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
11860 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
11870 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20  AVEPOINT_BEGIN  
11880 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41      0.#define SA
11890 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
118a0 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56     1.#define SAV
118b0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
118c0 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68    2.../*.** Each
118d0 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28   SQLite module (
118e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65  virtual table de
118f0 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66  finition) is def
11900 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  ined by an.** in
11910 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11920 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11930 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  e, stored in the
11940 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65   sqlite3.aModule
11950 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  .** hash table..
11960 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  */.struct Module
11970 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74   {.  const sqlit
11980 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
11990 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  le;       /* Cal
119a0 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a  lback pointers *
119b0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
119c0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
119d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
119e0 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
119f0 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
11a00 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20  void *pAux;     
11a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73       /* pAux pas
11a30 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
11a40 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
11a50 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
11a60 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  d *);           
11a70 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72   /* Module destr
11a80 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
11a90 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54  /.  Table *pEpoT
11aa0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
11ab0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e           /* Epon
11ac0 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20  ymous table for 
11ad0 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d  this module */.}
11ae0 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ;../*.** informa
11af0 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
11b00 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c  column of an SQL
11b10 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69   table is held i
11b20 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  n an instance.**
11b30 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
11b40 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  re..*/.struct Co
11b50 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lumn {.  char *z
11b60 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
11b70 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
11b80 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65  , \000, then the
11b90 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20   type */.  Expr 
11ba0 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44  *pDflt;     /* D
11bb0 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
11bc0 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
11bd0 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20   char *zColl;   
11be0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
11bf0 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c  equence.  If NUL
11c00 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75  L, use the defau
11c10 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75  lt */.  u8 notNu
11c20 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f  ll;      /* An O
11c30 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64  E_ code for hand
11c40 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  ling a NOT NULL 
11c50 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
11c60 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
11c70 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53   /* One of the S
11c80 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61  QLITE_AFF_... va
11c90 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45  lues */.  u8 szE
11ca0 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  st;        /* Es
11cb0 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
11cc0 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f  value in this co
11cd0 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54  lumn. sizeof(INT
11ce0 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  )==1 */.  u8 col
11cf0 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f  Flags;     /* Bo
11d00 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73  olean properties
11d10 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20  .  See COLFLAG_ 
11d20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f  defines below */
11d30 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
11d40 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d  values for Colum
11d50 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23  n.colFlags:.*/.#
11d60 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50  define COLFLAG_P
11d70 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20  RIMKEY  0x0001  
11d80 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70    /* Column is p
11d90 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61  art of the prima
11da0 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
11db0 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  e COLFLAG_HIDDEN
11dc0 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
11dd0 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  A hidden column 
11de0 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  in a virtual tab
11df0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  le */.#define CO
11e00 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30  LFLAG_HASTYPE  0
11e10 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65  x0004    /* Type
11e20 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f   name follows co
11e30 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65  lumn name */.#de
11e40 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49  fine COLFLAG_UNI
11e50 51 55 45 20 20 20 30 78 30 30 30 38 20 20 20 20  QUE   0x0008    
11e60 2f 2a 20 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f  /* Column def co
11e70 6e 74 61 69 6e 73 20 22 55 4e 49 51 55 45 22 20  ntains "UNIQUE" 
11e80 6f 72 20 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69  or "PK" */.#defi
11e90 6e 65 20 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45  ne COLFLAG_SORTE
11ea0 52 52 45 46 20 30 78 30 30 31 30 20 20 20 2f 2a  RREF 0x0010   /*
11eb0 20 55 73 65 20 73 6f 72 74 65 72 2d 72 65 66 73   Use sorter-refs
11ec0 20 77 69 74 68 20 74 68 69 73 20 63 6f 6c 75 6d   with this colum
11ed0 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43  n */../*.** A "C
11ee0 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63  ollating Sequenc
11ef0 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  e" is defined by
11f00 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
11f10 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
11f20 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63   structure. Conc
11f30 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c  eptually, a coll
11f40 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63  ating sequence c
11f50 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d  onsists of a nam
11f60 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61  e and.** a compa
11f70 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68  rison routine th
11f80 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f  at defines the o
11f90 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71  rder of that seq
11fa0 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  uence..**.** If 
11fb0 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20  CollSeq.xCmp is 
11fc0 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74  NULL, it means t
11fd0 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61  hat the.** colla
11fe0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
11ff0 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64   undefined.  Ind
12000 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e  ices built on an
12010 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f   undefined.** co
12020 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
12030 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64   may not be read
12040 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a   or written..*/.
12050 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b  struct CollSeq {
12060 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
12070 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
12080 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e   of the collatin
12090 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d  g sequence, UTF-
120a0 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75  8 encoded */.  u
120b0 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
120c0 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
120d0 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79  oding handled by
120e0 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69   xCmp() */.  voi
120f0 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20  d *pUser;       
12100 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
12110 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a  ment to xCmp() *
12120 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28  /.  int (*xCmp)(
12130 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
12140 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e   void*, int, con
12150 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
12160 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
12170 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72  ;  /* Destructor
12180 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b   for pUser */.};
12190 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f  ../*.** A sort o
121a0 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68  rder can be eith
121b0 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a  er ASC or DESC..
121c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
121d0 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30  E_SO_ASC       0
121e0 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
121f0 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
12200 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
12210 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f  O_DESC      1  /
12220 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
12230 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
12240 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55  fine SQLITE_SO_U
12250 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e  NDEFINED -1 /* N
12260 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65  o sort order spe
12270 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  cified */../*.**
12280 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   Column affinity
12290 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   types..**.** Th
122a0 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65  ese used to have
122b0 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c   mnemonic name l
122c0 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49  ike 'i' for SQLI
122d0 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61  TE_AFF_INTEGER a
122e0 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51  nd.** 't' for SQ
122f0 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20  LITE_AFF_TEXT.  
12300 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20  But we can save 
12310 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61  a little space a
12320 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68  nd improve.** th
12330 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65  e speed a little
12340 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68   by numbering th
12350 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75  e values consecu
12360 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75  tively..**.** Bu
12370 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
12380 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
12390 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
123a0 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  A'.  That way,.*
123b0 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
123c0 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
123d0 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
123e0 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
123f0 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
12400 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
12410 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
12420 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
12430 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
12440 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
12450 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
12460 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
12470 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
12480 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
12490 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
124a0 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42  n.  And the BLOB
124b0 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a   type is first..
124c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
124d0 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27  E_AFF_BLOB     '
124e0 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  A'.#define SQLIT
124f0 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
12500 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  B'.#define SQLIT
12510 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
12520 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  C'.#define SQLIT
12530 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
12540 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  D'.#define SQLIT
12550 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
12560 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  E'..#define sqli
12570 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
12580 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
12590 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
125a0 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
125b0 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
125c0 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
125d0 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
125e0 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
125f0 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a  inity value..*/.
12600 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12610 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37  FF_MASK     0x47
12620 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e  ../*.** Addition
12630 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68  al bit values th
12640 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77  at can be ORed w
12650 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20  ith an affinity 
12660 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67  without.** chang
12670 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
12680 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
12690 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20  TE_NOTNULL flag 
126a0 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  is a combination
126b0 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a   of NULLEQ and J
126c0 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74  UMPIFNULL..** It
126d0 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72   causes an asser
126e0 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65  t() to fire if e
126f0 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f  ither operand to
12700 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a   a comparison.**
12710 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c   operator is NUL
12720 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20  L.  It is added 
12730 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61  to certain compa
12740 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20  rison operators 
12750 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74  to.** prove that
12760 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72   the operands ar
12770 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c  e always NOT NUL
12780 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  L..*/.#define SQ
12790 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20  LITE_KEEPNULL   
127a0 20 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64 20    0x08  /* Used 
127b0 62 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20  by vector == or 
127c0 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  <> */.#define SQ
127d0 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
127e0 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73    0x10  /* jumps
127f0 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
12800 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64  nd is NULL */.#d
12810 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f  efine SQLITE_STO
12820 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20  REP2      0x20  
12830 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
12840 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65  in reg[P2] rathe
12850 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23  r than jump */.#
12860 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55  define SQLITE_NU
12870 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20  LLEQ       0x80 
12880 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f   /* NULL=NULL */
12890 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
128a0 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39  NOTNULL      0x9
128b0 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  0  /* Assert tha
128c0 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  t operands are n
128d0 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a  ever NULL */../*
128e0 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66  .** An object of
128f0 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72   this type is cr
12900 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76  eated for each v
12910 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65  irtual table pre
12920 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64  sent in.** the d
12930 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
12940 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
12950 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
12960 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
12970 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
12980 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
12990 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
129a0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
129b0 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
129c0 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
129d0 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
129e0 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
129f0 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
12a00 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
12a10 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
12a20 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
12a30 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
12a40 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
12a50 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
12a60 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70  ual table.** imp
12a70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c  lementation. sql
12a80 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
12a90 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68  es can not be sh
12aa0 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20  ared between.** 
12ab0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
12ac0 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20  ions, even when 
12ad0 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20  the rest of the 
12ae0 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
12af0 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  se.** schema is 
12b00 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69  shared, as the i
12b10 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
12b20 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64  ten stores the d
12b30 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
12b40 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73  ction handle pas
12b50 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68  sed to it via th
12b60 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20  e xConnect() or 
12b70 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64  xCreate() method
12b80 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69  .** during initi
12b90 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e  alization intern
12ba0 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62  ally. This datab
12bb0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ase connection h
12bc0 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65  andle may.** the
12bd0 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  n be used by the
12be0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
12bf0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
12c00 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62   access real tab
12c10 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68  les.** within th
12c20 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74  e database. So t
12c30 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20  hat they appear 
12c40 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
12c50 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61  allers.** transa
12c60 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63  ction, these acc
12c70 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65  esses need to be
12c80 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61   made via the sa
12c90 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  me database.** c
12ca0 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61  onnection as tha
12cb0 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  t used to execut
12cc0 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73  e SQL operations
12cd0 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
12ce0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  table..**.** All
12cf0 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
12d00 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  that correspond 
12d10 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
12d20 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a  e in a shared.**
12d30 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
12d40 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73   are initially s
12d50 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
12d60 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74  d-list pointed t
12d70 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c  o by.** the Tabl
12d80 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72  e.pVTable member
12d90 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65   variable of the
12da0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54   corresponding T
12db0 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  able object..** 
12dc0 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f  When an sqlite3_
12dd0 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74  prepare() operat
12de0 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20  ion is required 
12df0 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
12e00 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20  rtual.** table, 
12e10 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20  it searches the 
12e20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61  list for the VTa
12e30 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70  ble that corresp
12e40 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64  onds to the.** d
12e50 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
12e60 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65  on doing the pre
12e70 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20  paring so as to 
12e80 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a  use the correct.
12e90 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  ** sqlite3_vtab*
12ea0 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63   handle in the c
12eb0 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a  ompiled query..*
12ec0 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d  *.** When an in-
12ed0 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a  memory Table obj
12ee0 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28  ect is deleted (
12ef0 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e  for example when
12f00 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69   the.** schema i
12f10 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64  s being reloaded
12f20 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
12f30 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62  ), the VTable ob
12f40 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a  jects are not.**
12f50 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65   deleted and the
12f60 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
12f70 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78  andles are not x
12f80 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a  Disconnect()ed.*
12f90 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49  * immediately. I
12fa0 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65  nstead, they are
12fb0 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20   moved from the 
12fc0 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69  Table.pVTable li
12fd0 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72  st to.** another
12fe0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
12ff0 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  ded by the sqlit
13000 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d  e3.pDisconnect m
13010 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  ember of the.** 
13020 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
13030 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e  lite3 structure.
13040 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64   They are then d
13050 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65  eleted/xDisconne
13060 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d  cted.** next tim
13070 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73  e a statement is
13080 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20   prepared using 
13090 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54  said sqlite3*. T
130a0 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74  his is done.** t
130b0 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b  o avoid deadlock
130c0 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e   issues involvin
130d0 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74  g multiple sqlit
130e0 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73  e3.mutex mutexes
130f0 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f  ..** Refer to co
13100 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e  mments above fun
13110 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61  ction sqlite3Vta
13120 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f  bUnlockList() fo
13130 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74  r an.** explanat
13140 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74  ion as to why it
13150 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20   is safe to add 
13160 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73  an entry to an s
13170 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
13180 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f  ct.** list witho
13190 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63  ut holding the c
131a0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
131b0 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
131c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
131d0 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f  ry for objects o
131e0 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
131f0 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20  lways allocated 
13200 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d  by.** sqlite3DbM
13210 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74  alloc(), using t
13220 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  he connection ha
13230 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56  ndle stored in V
13240 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74  Table.db as.** t
13250 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
13260 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61  t..*/.struct VTa
13270 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ble {.  sqlite3 
13280 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
13290 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
132a0 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61  nnection associa
132b0 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61  ted with this ta
132c0 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20  ble */.  Module 
132d0 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20  *pMod;          
132e0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
132f0 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
13300 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  tation */.  sqli
13310 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
13320 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
13330 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63   to vtab instanc
13340 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  e */.  int nRef;
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
13370 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73  inters to this s
13380 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38  tructure */.  u8
13390 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20   bConstraint;   
133a0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
133b0 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  if constraints a
133c0 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a  re supported */.
133d0 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
133e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  ;           /* D
133f0 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45  epth of the SAVE
13400 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20  POINT stack */. 
13410 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20   VTable *pNext; 
13420 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
13430 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73  xt in linked lis
13440 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
13450 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  .};../*.** The s
13460 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53  chema for each S
13470 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65  QL table and vie
13480 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  w is represented
13490 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79   in memory.** by
134a0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
134b0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
134c0 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
134d0 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
134e0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
134f0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
13500 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
13510 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
13520 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
13530 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
13540 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
13550 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
13560 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
13570 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
13580 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
13590 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
135a0 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
135b0 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
135c0 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
135d0 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
135e0 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
135f0 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
13600 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
13610 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
13620 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
13630 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
13640 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
13650 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
13660 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
13670 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65    ExprList *pChe
13680 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48  ck;    /* All CH
13690 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
136a0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
136b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e            /*   .
136c0 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  .. also used as 
136d0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74  column name list
136e0 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20   in a VIEW */.  
136f0 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
13700 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72       /* Root BTr
13710 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69 73  ee page for this
13720 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20   table */.  u32 
13730 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20 20 20  nTabRef;        
13740 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
13750 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54  inters to this T
13760 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74 61  able */.  u32 ta
13770 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 2f  bFlags;        /
13780 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76  * Mask of TF_* v
13790 61 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20 69  alues */.  i16 i
137a0 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  PKey;           
137b0 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69  /* If not negati
137c0 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b  ve, use aCol[iPK
137d0 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64  ey] as the rowid
137e0 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
137f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
13800 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
13810 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
13820 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f  .  LogEst nRowLo
13830 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d  gEst;   /* Estim
13840 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
13850 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
13860 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
13870 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
13880 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
13890 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
138a0 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
138b0 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
138c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
138d0 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
138e0 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
138f0 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
13900 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
13910 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
13920 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20  u8 keyConf;     
13930 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20       /* What to 
13940 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e  do in case of un
13950 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63  iqueness conflic
13960 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69  t on iPKey */.#i
13970 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13980 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69  T_ALTERTABLE.  i
13990 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b  nt addColOffset;
139a0 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
139b0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
139c0 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  mt to add a new 
139d0 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66  column */.#endif
139e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
139f0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
13a00 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41  E.  int nModuleA
13a10 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  rg;      /* Numb
13a20 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
13a30 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f  to the module */
13a40 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75  .  char **azModu
13a50 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f  leArg;  /* 0: mo
13a60 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32  dule 1: schema 2
13a70 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e  : vtab name 3...
13a80 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62  : args */.  VTab
13a90 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20  le *pVTable;    
13aa0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62   /* List of VTab
13ab0 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23  le objects. */.#
13ac0 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20  endif.  Trigger 
13ad0 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20  *pTrigger;   /* 
13ae0 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73  List of triggers
13af0 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65   stored in pSche
13b00 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  ma */.  Schema *
13b10 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
13b20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74  Schema that cont
13b30 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20  ains this table 
13b40 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78  */.  Table *pNex
13b50 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78  tZombie;  /* Nex
13b60 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70  t on the Parse.p
13b70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a  ZombieTab list *
13b80 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
13b90 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54  wed values for T
13ba0 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a  able.tabFlags..*
13bb0 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65  *.** TF_OOOHidde
13bc0 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62  n applies to tab
13bd0 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68 61 74  les or view that
13be0 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c   have hidden col
13bf0 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a  umns that are.**
13c00 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e   followed by non
13c10 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e  -hidden columns.
13c20 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45    Example:  "CRE
13c30 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
13c40 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61  E x USING.** vta
13c50 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b  b1(a HIDDEN, b);
13c60 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69 73  ".  Since "b" is
13c70 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f   a non-hidden co
13c80 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20  lumn but "a" is 
13c90 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54  hidden,.** the T
13ca0 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72  F_OOOHidden attr
13cb0 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c  ibute would appl
13cc0 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20  y in this case. 
13cd0 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65 71   Such tables req
13ce0 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20  uire.** special 
13cf0 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20  handling during 
13d00 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e  INSERT processin
13d10 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  g..*/.#define TF
13d20 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20  _Readonly       
13d30 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 52 65   0x0001    /* Re
13d40 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74  ad-only system t
13d50 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
13d60 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20  TF_Ephemeral    
13d70 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
13d80 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  An ephemeral tab
13d90 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
13da0 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20  _HasPrimaryKey  
13db0 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 61   0x0004    /* Ta
13dc0 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72  ble has a primar
13dd0 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
13de0 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e   TF_Autoincremen
13df0 74 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a  t   0x0008    /*
13e00 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   Integer primary
13e10 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72   key is autoincr
13e20 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  ement */.#define
13e30 20 54 46 5f 48 61 73 53 74 61 74 31 20 20 20 20   TF_HasStat1    
13e40 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
13e50 20 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65 74 20   nRowLogEst set 
13e60 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
13e70 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  1 */.#define TF_
13e80 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20  WithoutRowid    
13e90 30 78 30 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20  0x0020    /* No 
13ea0 72 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59 20  rowid.  PRIMARY 
13eb0 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a  KEY is the key *
13ec0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56  /.#define TF_NoV
13ed0 69 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78 30  isibleRowid  0x0
13ee0 30 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65  040    /* No use
13ef0 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69 64  r-visible "rowid
13f00 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  " column */.#def
13f10 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  ine TF_OOOHidden
13f20 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 20         0x0080   
13f30 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72   /* Out-of-Order
13f40 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
13f50 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53 74  */.#define TF_St
13f60 61 74 73 55 73 65 64 20 20 20 20 20 20 20 30 78  atsUsed       0x
13f70 30 31 30 30 20 20 20 20 2f 2a 20 51 75 65 72 79  0100    /* Query
13f80 20 70 6c 61 6e 6e 65 72 20 64 65 63 69 73 69 6f   planner decisio
13f90 6e 73 20 61 66 66 65 63 74 65 64 20 62 79 0a 20  ns affected by. 
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52      ** Index.aiR
13fd0 6f 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65  owLogEst[] value
13fe0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  s */.#define TF_
13ff0 48 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20  HasNotNull      
14000 30 78 30 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e  0x0200    /* Con
14010 74 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63  tains NOT NULL c
14020 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
14030 65 66 69 6e 65 20 54 46 5f 53 68 61 64 6f 77 20  efine TF_Shadow 
14040 20 20 20 20 20 20 20 20 20 30 78 30 34 30 30 20           0x0400 
14050 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
14060 20 73 68 61 64 6f 77 20 74 61 62 6c 65 20 2a 2f   shadow table */
14070 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20  ../*.** Test to 
14080 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  see whether or n
14090 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61 20  ot a table is a 
140a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
140b0 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20  This is.** done 
140c0 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68  as a macro so th
140d0 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70  at it will be op
140e0 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e  timized out when
140f0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
14100 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69  e support is omi
14110 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
14120 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ild..*/.#ifndef 
14130 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
14140 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
14150 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
14160 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d 6f 64 75       ((X)->nModu
14170 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a 23 20 20  leArg).#else.#  
14180 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
14190 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e 64 69  (X)      0.#endi
141a0 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
141b0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  to determine if 
141c0 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64  a column is hidd
141d0 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72 79 48  en.  IsOrdinaryH
141e0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a  iddenColumn().**
141f0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
14200 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61 62 6c  non-virtual tabl
14210 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74 61 62  es (ordinary tab
14220 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29 20 61  les and views) a
14230 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  nd is.** always 
14240 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53 51 4c  false unless SQL
14250 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
14260 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66  N_COLUMNS is def
14270 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73  ined.  The.** Is
14280 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d  HiddenColumn() m
14290 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61 6c 20  acro is general 
142a0 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20  purpose..*/.#if 
142b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
142c0 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
142d0 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e 65 20  UMNS).#  define 
142e0 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
142f0 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d  )         (((X)-
14300 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
14310 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
14320 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
14330 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
14340 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c  (X) (((X)->colFl
14350 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
14360 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20  DDEN)!=0).#elif 
14370 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
14380 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
14390 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  E).#  define IsH
143a0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
143b0 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f         (((X)->co
143c0 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
143d0 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20  _HIDDEN)!=0).#  
143e0 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72  define IsOrdinar
143f0 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  yHiddenColumn(X)
14400 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69   0.#else.#  defi
14410 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
14420 6e 28 58 29 20 20 20 20 20 20 20 20 20 30 0a 23  n(X)         0.#
14430 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e    define IsOrdin
14440 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
14450 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  X) 0.#endif.../*
14460 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20   Does the table 
14470 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a  have a rowid */.
14480 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64  #define HasRowid
14490 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74  (X)     (((X)->t
144a0 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74  abFlags & TF_Wit
144b0 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23  houtRowid)==0).#
144c0 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52 6f  define VisibleRo
144d0 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74 61  wid(X) (((X)->ta
144e0 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56 69  bFlags & TF_NoVi
144f0 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a  sibleRowid)==0).
14500 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65  ./*.** Each fore
14510 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
14520 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  nt is an instanc
14530 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
14540 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
14550 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65  .** A foreign ke
14560 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  y is associated 
14570 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e  with two tables.
14580 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62    The "from" tab
14590 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62  le is.** the tab
145a0 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
145b0 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
145c0 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61  clause that crea
145d0 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  tes the foreign.
145e0 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f  ** key.  The "to
145f0 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74  " table is the t
14600 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d  able that is nam
14610 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45  ed in the REFERE
14620 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20  NCES clause..** 
14630 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78  Consider this ex
14640 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
14650 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
14660 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e  1(.**       a IN
14670 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
14680 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e  Y,.**       b IN
14690 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54  TEGER CONSTRAINT
146a0 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20   fk1 REFERENCES 
146b0 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b  ex2(x).**     );
146c0 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69  .**.** For forei
146d0 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68  gn key "fk1", th
146e0 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
146f0 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f  "ex1" and the to
14700 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e  -table is "ex2".
14710 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e  .** Equivalent n
14720 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ames:.**.**     
14730 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68  from-table == ch
14740 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20  ild-table.**    
14750 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70     to-table == p
14760 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a  arent-table.**.*
14770 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45  * Each REFERENCE
14780 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74  S clause generat
14790 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  es an instance o
147a0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
147b0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69  structure.** whi
147c0 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74  ch is attached t
147d0 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  o the from-table
147e0 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20  .  The to-table 
147f0 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77  need not exist w
14800 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d  hen.** the from-
14810 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
14820 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65  .  The existence
14830 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65   of the to-table
14840 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e   is not checked.
14850 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20  .**.** The list 
14860 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66  of all parents f
14870 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58  or child Table X
14880 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46   is held at X.pF
14890 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73  Key..**.** A lis
148a0 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65  t of all childre
148b0 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61  n for a table na
148c0 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67  med Z (which mig
148d0 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73  ht not even exis
148e0 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e  t).** is held in
148f0 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68   Schema.fkeyHash
14900 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65 79   with a hash key
14910 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74   of Z..*/.struct
14920 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20   FKey {.  Table 
14930 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54  *pFrom;     /* T
14940 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
14950 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
14960 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c  lause (aka: Chil
14970 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  d) */.  FKey *pN
14980 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78  extFrom;  /* Nex
14990 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65 20  t FKey with the 
149a0 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e  same in pFrom. N
149b0 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46  ext parent of pF
149c0 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  rom */.  char *z
149d0 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  To;        /* Na
149e0 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74  me of table that
149f0 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20   the key points 
14a00 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29  to (aka: Parent)
14a10 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
14a20 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  tTo;    /* Next 
14a30 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
14a40 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66  o. Next child of
14a50 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20   zTo. */.  FKey 
14a60 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20  *pPrevTo;    /* 
14a70 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74 68  Previous with th
14a80 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20  e same zTo */.  
14a90 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  int nCol;       
14aa0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
14ab0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b  olumns in this k
14ac0 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52  ey */.  /* EV: R
14ad0 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a  -30323-21917 */.
14ae0 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b    u8 isDeferred;
14af0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
14b00 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65  f constraint che
14b10 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65  cking is deferre
14b20 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f  d till COMMIT */
14b30 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d  .  u8 aAction[2]
14b40 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44  ;        /* ON D
14b50 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44  ELETE and ON UPD
14b60 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73  ATE actions, res
14b70 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54  pectively */.  T
14b80 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65  rigger *apTrigge
14b90 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73  r[2];/* Triggers
14ba0 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61   for aAction[] a
14bb0 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
14bc0 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20  ct sColMap {    
14bd0 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20    /* Mapping of 
14be0 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d  columns in pFrom
14bf0 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a   to columns in z
14c00 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46  To */.    int iF
14c10 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  rom;            
14c20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75  /* Index of colu
14c30 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20  mn in pFrom */. 
14c40 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20     char *zCol;  
14c50 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
14c60 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54   of column in zT
14c70 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20  o.  If NULL use 
14c80 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
14c90 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20   } aCol[1];     
14ca0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
14cb0 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20  try for each of 
14cc0 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  nCol columns */.
14cd0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65  };../*.** SQLite
14ce0 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64   supports many d
14cf0 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f  ifferent ways to
14d00 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74   resolve a const
14d10 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20  raint.** error. 
14d20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73   ROLLBACK proces
14d30 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20  sing means that 
14d40 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
14d50 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73  lation.** causes
14d60 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
14d70 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69  n process to fai
14d80 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75  l and for the cu
14d90 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
14da0 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65  n.** to be rolle
14db0 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70  d back.  ABORT p
14dc0 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
14dd0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
14de0 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c   process.** fail
14df0 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20  s and any prior 
14e00 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61  changes from tha
14e10 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20  t one operation 
14e20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a  are backed out,.
14e30 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73  ** but the trans
14e40 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f  action is not ro
14e50 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c  lled back.  FAIL
14e60 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
14e70 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70  s that.** the op
14e80 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  eration in progr
14e90 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65  ess stops and re
14ea0 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63  turns an error c
14eb0 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a  ode.  But prior.
14ec0 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74  ** changes due t
14ed0 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  o the same opera
14ee0 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63  tion are not bac
14ef0 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72  ked out and no r
14f00 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72  ollback.** occur
14f10 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73  s.  IGNORE means
14f20 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63   that the partic
14f30 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61  ular row that ca
14f40 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  used the constra
14f50 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  int.** error is 
14f60 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20  not inserted or 
14f70 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73  updated.  Proces
14f80 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
14f90 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69  nd no error.** i
14fa0 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50  s returned.  REP
14fb0 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20  LACE means that 
14fc0 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61  preexisting data
14fd0 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63  base rows that c
14fe0 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55  aused.** a UNIQU
14ff0 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
15000 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76  lation are remov
15010 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e  ed so that the n
15020 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20  ew insert or.** 
15030 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65  update can proce
15040 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
15050 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
15060 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74   error is report
15070 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49  ed..**.** RESTRI
15080 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64  CT, SETNULL, and
15090 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73   CASCADE actions
150a0 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66   apply only to f
150b0 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20  oreign keys..** 
150c0 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20  RESTRICT is the 
150d0 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f  same as ABORT fo
150e0 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65  r IMMEDIATE fore
150f0 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65  ign keys and the
15100 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c  .** same as ROLL
15110 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45  BACK for DEFERRE
15120 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c  D keys.  SETNULL
15130 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
15140 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69  foreign.** key i
15150 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20  s set to NULL.  
15160 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68  CASCADE means th
15170 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55  at a DELETE or U
15180 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20  PDATE of the.** 
15190 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
151a0 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74   row is propagat
151b0 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20  ed into the row 
151c0 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a  that holds the.*
151d0 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a  * foreign key..*
151e0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
151f0 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75  ng symbolic valu
15200 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72  es are used to r
15210 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65  ecord which type
15220 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f  .** of action to
15230 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e   take..*/.#defin
15240 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20  e OE_None     0 
15250 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f    /* There is no
15260 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63   constraint to c
15270 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  heck */.#define 
15280 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20  OE_Rollback 1   
15290 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72  /* Fail the oper
152a0 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61  ation and rollba
152b0 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
152c0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  on */.#define OE
152d0 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a  _Abort    2   /*
152e0 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65   Back out change
152f0 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c  s but do no roll
15300 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e  back transaction
15310 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46   */.#define OE_F
15320 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53  ail     3   /* S
15330 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f  top the operatio
15340 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20  n but leave all 
15350 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f  prior changes */
15360 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f  .#define OE_Igno
15370 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f  re   4   /* Igno
15380 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f  re the error. Do
15390 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45   not do the INSE
153a0 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
153b0 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61  #define OE_Repla
153c0 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74  ce  5   /* Delet
153d0 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72  e existing recor
153e0 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52  d, then do INSER
153f0 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
15400 64 65 66 69 6e 65 20 4f 45 5f 55 70 64 61 74 65  define OE_Update
15410 20 20 20 36 20 20 20 2f 2a 20 50 72 6f 63 65 73     6   /* Proces
15420 73 20 61 73 20 61 20 44 4f 20 55 50 44 41 54 45  s as a DO UPDATE
15430 20 69 6e 20 61 6e 20 75 70 73 65 72 74 20 2a 2f   in an upsert */
15440 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74  .#define OE_Rest
15450 72 69 63 74 20 37 20 20 20 2f 2a 20 4f 45 5f 41  rict 7   /* OE_A
15460 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41  bort for IMMEDIA
15470 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  TE, OE_Rollback 
15480 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a  for DEFERRED */.
15490 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75  #define OE_SetNu
154a0 6c 6c 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74  ll  8   /* Set t
154b0 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
154c0 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a  alue to NULL */.
154d0 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66  #define OE_SetDf
154e0 6c 74 20 20 39 20 20 20 2f 2a 20 53 65 74 20 74  lt  9   /* Set t
154f0 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
15500 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61  alue to its defa
15510 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ult */.#define O
15520 45 5f 43 61 73 63 61 64 65 20 20 31 30 20 20 2f  E_Cascade  10  /
15530 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68  * Cascade the ch
15540 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
15550 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 31 20   OE_Default  11 
15560 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20   /* Do whatever 
15570 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69  the default acti
15580 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  on is */.../*.**
15590 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
155a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
155b0 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
155c0 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a  d as the first.*
155d0 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71  * argument to sq
155e0 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70  lite3VdbeKeyComp
155f0 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20  are and is used 
15600 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a  to control the.*
15610 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  * comparison of 
15620 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65  the two index ke
15630 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ys..**.** Note t
15640 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d  hat aSortOrder[]
15650 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76   and aColl[] hav
15660 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73  e nField+1 slots
15670 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
15680 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72  nField slots for
15690 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
156a0 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e  an index then on
156b0 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20  e extra slot.** 
156c0 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74  for the rowid at
156d0 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
156e0 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20  uct KeyInfo {.  
156f0 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u32 nRef;       
15700 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15710 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74   references to t
15720 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  his KeyInfo obje
15730 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ct */.  u8 enc; 
15740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
15750 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f  ext encoding - o
15760 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
15770 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a  _UTF* values */.
15780 20 20 75 31 36 20 6e 4b 65 79 46 69 65 6c 64 3b    u16 nKeyField;
15790 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
157a0 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69  of key columns i
157b0 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
157c0 20 75 31 36 20 6e 41 6c 6c 46 69 65 6c 64 3b 20   u16 nAllField; 
157d0 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 63 6f       /* Total co
157e0 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75 64 69 6e 67  lumns, including
157f0 20 6b 65 79 20 70 6c 75 73 20 6f 74 68 65 72 73   key plus others
15800 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
15810 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
15820 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
15830 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53  tion */.  u8 *aS
15840 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a  ortOrder;     /*
15850 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20   Sort order for 
15860 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a  each column. */.
15870 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c    CollSeq *aColl
15880 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  [1];  /* Collati
15890 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  ng sequence for 
158a0 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
158b0 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a   key */.};../*.*
158c0 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f  * This object ho
158d0 6c 64 73 20 61 20 72 65 63 6f 72 64 20 77 68 69  lds a record whi
158e0 63 68 20 68 61 73 20 62 65 65 6e 20 70 61 72 73  ch has been pars
158f0 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69  ed out into indi
15900 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73  vidual.** fields
15910 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73  , for the purpos
15920 65 73 20 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f  es of doing a co
15930 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  mparison..**.** 
15940 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f  A record is an o
15950 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61  bject that conta
15960 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
15970 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a  fields of data..
15980 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20 75  ** Records are u
15990 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
159a0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61   content of a ta
159b0 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73  ble row and to s
159c0 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20  tore.** the key 
159d0 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20  of an index.  A 
159e0 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66  blob encoding of
159f0 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72 65   a record is cre
15a00 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f  ated by.** the O
15a10 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  P_MakeRecord opc
15a20 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45 20  ode of the VDBE 
15a30 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d 62  and is disassemb
15a40 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50  led by the.** OP
15a50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a  _Column opcode..
15a60 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  **.** An instanc
15a70 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
15a80 20 73 65 72 76 65 73 20 61 73 20 61 20 22 6b 65   serves as a "ke
15a90 79 22 20 66 6f 72 20 64 6f 69 6e 67 20 61 20 73  y" for doing a s
15aa0 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69  earch on.** an i
15ab0 6e 64 65 78 20 62 2b 74 72 65 65 2e 20 54 68 65  ndex b+tree. The
15ac0 20 67 6f 61 6c 20 6f 66 20 74 68 65 20 73 65 61   goal of the sea
15ad0 72 63 68 20 69 73 20 74 6f 20 66 69 6e 64 20 74  rch is to find t
15ae0 68 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a  he entry that.**
15af0 20 69 73 20 63 6c 6f 73 65 64 20 74 6f 20 74 68   is closed to th
15b00 65 20 6b 65 79 20 64 65 73 63 72 69 62 65 64 20  e key described 
15b10 62 79 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20  by this object. 
15b20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 6d 69 67   This object mig
15b30 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20  ht hold.** just 
15b40 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20  a prefix of the 
15b50 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72  key.  The number
15b60 20 6f 66 20 66 69 65 6c 64 73 20 69 73 20 67 69   of fields is gi
15b70 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e  ven by.** pKeyIn
15b80 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a  fo->nField..**.*
15b90 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32 20  * The r1 and r2 
15ba0 66 69 65 6c 64 73 20 61 72 65 20 74 68 65 20 76  fields are the v
15bb0 61 6c 75 65 73 20 74 6f 20 72 65 74 75 72 6e 20  alues to return 
15bc0 69 66 20 74 68 69 73 20 6b 65 79 20 69 73 20 6c  if this key is l
15bd0 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67  ess than.** or g
15be0 72 65 61 74 65 72 20 74 68 61 6e 20 61 20 6b 65  reater than a ke
15bf0 79 20 69 6e 20 74 68 65 20 62 74 72 65 65 2c 20  y in the btree, 
15c00 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54  respectively.  T
15c10 68 65 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  hese are normall
15c20 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72  y.** -1 and +1 r
15c30 65 73 70 65 63 74 69 76 65 6c 79 2c 20 62 75 74  espectively, but
15c40 20 6d 69 67 68 74 20 62 65 20 69 6e 76 65 72 74   might be invert
15c50 65 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20  ed to +1 and -1 
15c60 69 66 20 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a  if the b-tree.**
15c70 20 69 73 20 69 6e 20 44 45 53 43 20 6f 72 64 65   is in DESC orde
15c80 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79  r..**.** The key
15c90 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63   comparison func
15ca0 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20 72  tions actually r
15cb0 65 74 75 72 6e 20 64 65 66 61 75 6c 74 5f 72 63  eturn default_rc
15cc0 20 77 68 65 6e 20 74 68 65 79 20 66 69 6e 64 0a   when they find.
15cd0 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d  ** an equals com
15ce0 70 61 72 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c  parison.  defaul
15cf0 74 5f 72 63 20 63 61 6e 20 62 65 20 2d 31 2c 20  t_rc can be -1, 
15d00 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20 74 68  0, or +1.  If th
15d10 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69  ere are.** multi
15d20 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ple entries in t
15d30 68 65 20 62 2d 74 72 65 65 20 77 69 74 68 20 74  he b-tree with t
15d40 68 65 20 73 61 6d 65 20 6b 65 79 20 28 77 68 65  he same key (whe
15d50 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a  n only looking.*
15d60 2a 20 61 74 20 74 68 65 20 66 69 72 73 74 20 70  * at the first p
15d70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73  KeyInfo->nFields
15d80 2c 29 20 74 68 65 6e 20 64 65 66 61 75 6c 74 5f  ,) then default_
15d90 72 63 20 63 61 6e 20 62 65 20 73 65 74 20 74 6f  rc can be set to
15da0 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75 73 65 20   -1 to.** cause 
15db0 74 68 65 20 73 65 61 72 63 68 20 74 6f 20 66 69  the search to fi
15dc0 6e 64 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63  nd the last matc
15dd0 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61 75 73  h, or +1 to caus
15de0 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 0a  e the search to.
15df0 2a 2a 20 66 69 6e 64 20 74 68 65 20 66 69 72 73  ** find the firs
15e00 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54  t match..**.** T
15e10 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f  he key compariso
15e20 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c  n functions will
15e30 20 73 65 74 20 65 71 53 65 65 6e 20 74 6f 20 74   set eqSeen to t
15e40 72 75 65 20 69 66 20 74 68 65 79 20 65 76 65 72  rue if they ever
15e50 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65 71 75 61  .** get and equa
15e60 6c 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20 63  l results when c
15e70 6f 6d 70 61 72 69 6e 67 20 74 68 69 73 20 73 74  omparing this st
15e80 72 75 63 74 75 72 65 20 74 6f 20 61 20 62 2d 74  ructure to a b-t
15e90 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57  ree record..** W
15ea0 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 21 3d  hen default_rc!=
15eb0 30 2c 20 74 68 65 20 73 65 61 72 63 68 20 6d 69  0, the search mi
15ec0 67 68 74 20 65 6e 64 20 75 70 20 6f 6e 20 74 68  ght end up on th
15ed0 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69 61  e record immedia
15ee0 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74  tely.** before t
15ef0 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 20 6f  he first match o
15f00 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66  r immediately af
15f10 74 65 72 20 74 68 65 20 6c 61 73 74 20 6d 61 74  ter the last mat
15f20 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53 65  ch.  The.** eqSe
15f30 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e  en field will in
15f40 64 69 63 61 74 65 20 77 68 65 74 68 65 72 20 6f  dicate whether o
15f50 72 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 6d  r not an exact m
15f60 61 74 63 68 20 65 78 69 73 74 73 20 69 6e 20 74  atch exists in t
15f70 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f  he.** b-tree..*/
15f80 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64  .struct Unpacked
15f90 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e  Record {.  KeyIn
15fa0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f  fo *pKeyInfo;  /
15fb0 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20  * Collation and 
15fc0 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72  sort-order infor
15fd0 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20  mation */.  Mem 
15fe0 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *aMem;          
15ff0 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75  /* Values */.  u
16000 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
16010 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16020 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d  entries in apMem
16030 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75  [] */.  i8 defau
16040 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43  lt_rc;      /* C
16050 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74  omparison result
16060 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75   if keys are equ
16070 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f  al */.  u8 errCo
16080 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  de;         /* E
16090 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62 79  rror detected by
160a0 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20   xRecordCompare 
160b0 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45  (CORRUPT or NOME
160c0 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20  M) */.  i8 r1;  
160d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
160e0 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
160f0 66 20 28 6c 68 73 20 3c 20 72 68 73 29 20 2a 2f  f (lhs < rhs) */
16100 0a 20 20 69 38 20 72 32 3b 20 20 20 20 20 20 20  .  i8 r2;       
16110 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
16120 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68  to return if (lh
16130 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 75 38  s > rhs) */.  u8
16140 20 65 71 53 65 65 6e 3b 20 20 20 20 20 20 20 20   eqSeen;        
16150 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 20    /* True if an 
16160 65 71 75 61 6c 69 74 79 20 63 6f 6d 70 61 72 69  equality compari
16170 73 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 65  son has been see
16180 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20  n */.};.../*.** 
16190 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69  Each SQL index i
161a0 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
161b0 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a   memory by an.**
161c0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
161d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
161e0 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ture..**.** The 
161f0 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74  columns of the t
16200 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f  able that are to
16210 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20   be indexed are 
16220 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20  described.** by 
16230 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66  the aiColumn[] f
16240 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72  ield of this str
16250 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61  ucture.  For exa
16260 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a  mple, suppose.**
16270 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c   we have the fol
16280 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64  lowing table and
16290 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20   index:.**.**   
162a0 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45    CREATE TABLE E
162b0 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e  x1(c1 int, c2 in
162c0 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20  t, c3 text);.** 
162d0 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
162e0 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63   Ex2 ON Ex1(c3,c
162f0 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  1);.**.** In the
16300 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
16310 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c   describing Ex1,
16320 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65   nCol==3 because
16330 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68   there are.** th
16340 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  ree columns in t
16350 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68  he table.  In th
16360 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  e Index structur
16370 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20  e describing.** 
16380 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20  Ex2, nColumn==2 
16390 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33  since 2 of the 3
163a0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20   columns of Ex1 
163b0 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20  are indexed..** 
163c0 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43  The value of aiC
163d0 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e  olumn is {2, 0}.
163e0 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32    aiColumn[0]==2
163f0 20 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20   because the.** 
16400 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20  first column to 
16410 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20  be indexed (c3) 
16420 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
16430 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e  2 in Ex1.aCol[].
16440 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63  .** The second c
16450 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
16460 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20  xed (c1) has an 
16470 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a  index of 0 in.**
16480 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e   Ex1.aCol[], hen
16490 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b  ce Ex2.aiColumn[
164a0 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  1]==0..**.** The
164b0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66   Index.onError f
164c0 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20  ield determines 
164d0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
164e0 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  he indexed colum
164f0 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e  ns.** must be un
16500 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f  ique and what to
16510 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20   do if they are 
16520 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78  not.  When Index
16530 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65  .onError=OE_None
16540 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68  ,.** it means th
16550 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71  is is not a uniq
16560 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72  ue index.  Other
16570 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69  wise it is a uni
16580 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64  que index.** and
16590 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e   the value of In
165a0 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69  dex.onError indi
165b0 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63  cate the which c
165c0 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
165d0 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20  on.** algorithm 
165e0 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76  to employ whenev
165f0 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  er an attempt is
16600 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20   made to insert 
16610 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20  a non-unique.** 
16620 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57  element..**.** W
16630 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43  hile parsing a C
16640 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43  REATE TABLE or C
16650 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74  REATE INDEX stat
16660 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74  ement in order t
16670 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44  o.** generate VD
16680 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f  BE code (as oppo
16690 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f  sed to parsing o
166a0 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20  ne read from an 
166b0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a  sqlite_master.**
166c0 20 74 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f   table as part o
166d0 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69  f parsing an exi
166e0 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 73  sting database s
166f0 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e  chema), transien
16700 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f  t instances.** o
16710 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
16720 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 2e   may be created.
16730 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
16740 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72  e Index.tnum var
16750 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64  iable is.** used
16760 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64   to store the ad
16770 64 72 65 73 73 20 6f 66 20 61 20 56 44 42 45 20  dress of a VDBE 
16780 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74  instruction, not
16790 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65   a database page
167a0 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63  .** number (it c
167b0 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61  annot - the data
167c0 62 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74  base page is not
167d0 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c   allocated until
167e0 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f   the VDBE.** pro
167f0 67 72 61 6d 20 69 73 20 65 78 65 63 75 74 65 64  gram is executed
16800 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f  ). See convertTo
16810 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c  WithoutRowidTabl
16820 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  e() for details.
16830 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
16840 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
16850 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16860 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e   Name of this in
16870 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69  dex */.  i16 *ai
16880 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
16890 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d    /* Which colum
168a0 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74  ns are used by t
168b0 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20  his index.  1st 
168c0 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  is 0 */.  LogEst
168d0 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20   *aiRowLogEst;  
168e0 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59     /* From ANALY
168f0 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65  ZE: Est. rows se
16900 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63  lected by each c
16910 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65  olumn */.  Table
16920 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20   *pTable;       
16930 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74      /* The SQL t
16940 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78  able being index
16950 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  ed */.  char *zC
16960 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20  olAff;          
16970 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
16980 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
16990 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
169a0 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78  */.  Index *pNex
169b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
169c0 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20   The next index 
169d0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
169e0 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a  the same table *
169f0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
16a00 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ema;         /* 
16a10 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
16a20 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  g this index */.
16a30 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72    u8 *aSortOrder
16a40 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f  ;          /* fo
16a50 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54  r each column: T
16a60 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65  rue==DESC, False
16a70 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73 74  ==ASC */.  const
16a80 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20   char **azColl; 
16a90 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
16aa0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
16ab0 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64  ce names for ind
16ac0 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50  ex */.  Expr *pP
16ad0 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20  artIdxWhere;    
16ae0 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
16af0 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64   for partial ind
16b00 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ices */.  ExprLi
16b10 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20  st *aColExpr;   
16b20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70     /* Column exp
16b30 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
16b40 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
16b50 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67         /* DB Pag
16b60 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f  e containing roo
16b70 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  t of this index 
16b80 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64  */.  LogEst szId
16b90 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a  xRow;         /*
16ba0 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61   Estimated avera
16bb0 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62  ge row size in b
16bc0 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b  ytes */.  u16 nK
16bd0 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  eyCol;          
16be0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16bf0 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20  columns forming 
16c00 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36  the key */.  u16
16c10 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
16c20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16c30 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65  of columns store
16c40 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  d in the index *
16c50 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20  /.  u8 onError; 
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16c70 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e  OE_Abort, OE_Ign
16c80 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c  ore, OE_Replace,
16c90 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20   or OE_None */. 
16ca0 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70   unsigned idxTyp
16cb0 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 30 3a 4e  e:2;      /* 0:N
16cc0 6f 72 6d 61 6c 20 31 3a 55 4e 49 51 55 45 2c 20  ormal 1:UNIQUE, 
16cd0 32 3a 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 33  2:PRIMARY KEY, 3
16ce0 3a 49 50 4b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  :IPK */.  unsign
16cf0 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b  ed bUnordered:1;
16d00 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69     /* Use this i
16d10 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49  ndex for == or I
16d20 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a  N queries only *
16d30 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69  /.  unsigned uni
16d40 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20  qNotNull:1;  /* 
16d50 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61  True if UNIQUE a
16d60 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20  nd NOT NULL for 
16d70 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  all columns */. 
16d80 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69   unsigned isResi
16d90 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  zed:1;    /* Tru
16da0 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78  e if resizeIndex
16db0 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65  Object() has bee
16dc0 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e  n called */.  un
16dd0 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e  signed isCoverin
16de0 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  g:1;   /* True i
16df0 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65  f this is a cove
16e00 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ring index */.  
16e10 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53  unsigned noSkipS
16e20 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e  can:1;   /* Do n
16e30 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b  ot try to use sk
16e40 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20  ip-scan if true 
16e50 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68 61  */.  unsigned ha
16e60 73 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a  sStat1:1;     /*
16e70 20 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c   aiRowLogEst val
16e80 75 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71  ues come from sq
16e90 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20  lite_stat1 */.  
16ea0 75 6e 73 69 67 6e 65 64 20 62 4e 6f 51 75 65 72  unsigned bNoQuer
16eb0 79 3a 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e  y:1;     /* Do n
16ec0 6f 74 20 75 73 65 20 74 68 69 73 20 69 6e 64 65  ot use this inde
16ed0 78 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75  x to optimize qu
16ee0 65 72 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20  eries */.#ifdef 
16ef0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
16f00 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
16f10 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
16f20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16f30 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
16f40 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
16f50 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
16f60 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
16f70 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
16f80 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
16f90 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
16fa0 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
16fb0 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
16fc0 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
16fd0 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
16fe0 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
16ff0 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
17000 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
17010 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
17020 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
17030 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
17040 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
17050 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
17060 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63  index */.  tRowc
17070 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20  nt nRowEst0;    
17080 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
17090 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66  ithmic number of
170a0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
170b0 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 42  ex */.#endif.  B
170c0 69 74 6d 61 73 6b 20 63 6f 6c 4e 6f 74 49 64 78  itmask colNotIdx
170d0 65 64 3b 20 20 20 20 20 2f 2a 20 30 20 66 6f 72  ed;     /* 0 for
170e0 20 75 6e 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d   unindexed colum
170f0 6e 73 20 69 6e 20 70 54 61 62 20 2a 2f 0a 7d 3b  ns in pTab */.};
17100 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
17110 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78  values for Index
17120 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66  .idxType.*/.#def
17130 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
17140 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30  PE_APPDEF      0
17150 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73     /* Created us
17160 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58  ing CREATE INDEX
17170 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
17180 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55  TE_IDXTYPE_UNIQU
17190 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d  E      1   /* Im
171a0 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55  plements a UNIQU
171b0 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  E constraint */.
171c0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
171d0 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
171e0 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65  Y  2   /* Is the
171f0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72   PRIMARY KEY for
17200 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
17210 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
17220 54 59 50 45 5f 49 50 4b 20 20 20 20 20 20 20 20  TYPE_IPK        
17230 20 33 20 20 20 2f 2a 20 49 4e 54 45 47 45 52 20   3   /* INTEGER 
17240 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65  PRIMARY KEY inde
17250 78 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  x */../* Return 
17260 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
17270 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  is a PRIMARY KEY
17280 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
17290 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e  e IsPrimaryKeyIn
172a0 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64  dex(X)  ((X)->id
172b0 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44  xType==SQLITE_ID
172c0 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
172d0 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  )../* Return tru
172e0 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
172f0 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a  a UNIQUE index *
17300 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71  /.#define IsUniq
17310 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20 20  ueIndex(X)      
17320 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f  ((X)->onError!=O
17330 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20  E_None)../* The 
17340 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d  Index.aiColumn[]
17350 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d   values are norm
17360 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69 6e  ally positive in
17370 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74  teger.  But.** t
17380 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e 65  here are some ne
17390 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 74 68  gative values th
173a0 61 74 20 68 61 76 65 20 73 70 65 63 69 61 6c 20  at have special 
173b0 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66  meaning:.*/.#def
173c0 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20 20  ine XN_ROWID    
173d0 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e 64   (-1)     /* Ind
173e0 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74  exed column is t
173f0 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  he rowid */.#def
17400 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20 20  ine XN_EXPR     
17410 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e 64   (-2)     /* Ind
17420 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61  exed column is a
17430 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  n expression */.
17440 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70  ./*.** Each samp
17450 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  le stored in the
17460 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
17470 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  ble is represent
17480 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20  ed in memory.** 
17490 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72  using a structur
174a0 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20  e of this type. 
174b0 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
174c0 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66  on at the top of
174d0 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e   the.** analyze.
174e0 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f  c source file fo
174f0 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
17500 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
17510 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  uct IndexSample 
17520 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20  {.  void *p;    
17530 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
17540 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f   to sampled reco
17550 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  rd */.  int n;  
17560 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
17570 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62  e of record in b
17580 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  ytes */.  tRowcn
17590 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45  t *anEq;    /* E
175a0 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
175b0 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79  ws where the key
175c0 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d   equals this sam
175d0 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
175e0 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73   *anLt;    /* Es
175f0 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
17600 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c  s where key is l
17610 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
17620 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
17630 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45  t *anDLt;   /* E
17640 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  st. number of di
17650 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73  stinct keys less
17660 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
17670 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  e */.};../*.** P
17680 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 74  ossible values t
17690 6f 20 75 73 65 20 77 69 74 68 69 6e 20 74 68 65  o use within the
176a0 20 66 6c 61 67 73 20 61 72 67 75 6d 65 6e 74 20   flags argument 
176b0 74 6f 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  to sqlite3GetTok
176c0 65 6e 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  en()..*/.#define
176d0 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f 51 55   SQLITE_TOKEN_QU
176e0 4f 54 45 44 20 20 20 20 30 78 31 20 2f 2a 20 54  OTED    0x1 /* T
176f0 6f 6b 65 6e 20 69 73 20 61 20 71 75 6f 74 65 64  oken is a quoted
17700 20 69 64 65 6e 74 69 66 69 65 72 2e 20 2a 2f 0a   identifier. */.
17710 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
17720 4f 4b 45 4e 5f 4b 45 59 57 4f 52 44 20 20 20 30  OKEN_KEYWORD   0
17730 78 32 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61  x2 /* Token is a
17740 20 6b 65 79 77 6f 72 64 2e 20 2a 2f 0a 0a 2f 2a   keyword. */../*
17750 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
17760 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
17770 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
17780 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
17790 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
177a0 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
177b0 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
177c0 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
177d0 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 74 68 61  * The memory tha
177e0 74 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f 20  t "z" points to 
177f0 69 73 20 6f 77 6e 65 64 20 62 79 20 6f 74 68 65  is owned by othe
17800 72 20 6f 62 6a 65 63 74 73 2e 20 20 54 61 6b 65  r objects.  Take
17810 20 63 61 72 65 0a 2a 2a 20 74 68 61 74 20 74 68   care.** that th
17820 65 20 6f 77 6e 65 72 20 6f 66 20 74 68 65 20 22  e owner of the "
17830 7a 22 20 73 74 72 69 6e 67 20 64 6f 65 73 20 6e  z" string does n
17840 6f 74 20 64 65 61 6c 6c 6f 63 61 74 65 20 74 68  ot deallocate th
17850 65 20 73 74 72 69 6e 67 20 62 65 66 6f 72 65 0a  e string before.
17860 2a 2a 20 74 68 65 20 54 6f 6b 65 6e 20 67 6f 65  ** the Token goe
17870 73 20 6f 75 74 20 6f 66 20 73 63 6f 70 65 21 20  s out of scope! 
17880 20 56 65 72 79 20 6f 66 74 65 6e 2c 20 74 68 65   Very often, the
17890 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f 20 73   "z" points to s
178a0 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a 20 69 6e 20  ome place.** in 
178b0 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 74 68  the middle of th
178c0 65 20 50 61 72 73 65 2e 7a 53 71 6c 20 74 65 78  e Parse.zSql tex
178d0 74 2e 20 20 42 75 74 20 69 74 20 6d 69 67 68 74  t.  But it might
178e0 20 61 6c 73 6f 20 70 6f 69 6e 74 20 74 6f 20 61   also point to a
178f0 0a 2a 2a 20 73 74 61 74 69 63 20 73 74 72 69 6e  .** static strin
17900 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b  g..*/.struct Tok
17910 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  en {.  const cha
17920 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78  r *z;     /* Tex
17930 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20  t of the token. 
17940 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e   Not NULL-termin
17950 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67  ated! */.  unsig
17960 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a  ned int n;    /*
17970 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   Number of chara
17980 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f  cters in this to
17990 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ken */.};../*.**
179a0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
179b0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
179c0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
179d0 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
179e0 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
179f0 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74  or a SELECT that
17a00 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   contains aggreg
17a10 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ate functions..*
17a20 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d  *.** If Expr.op=
17a30 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f  =TK_AGG_COLUMN o
17a40 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  r TK_AGG_FUNCTIO
17a50 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67  N then Expr.pAgg
17a60 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69  Info is a.** poi
17a70 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
17a80 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70  ucture.  The Exp
17a90 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20  r.iColumn field 
17aa0 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a  is the index in.
17ab0 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b  ** AggInfo.aCol[
17ac0 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75  ] or AggInfo.aFu
17ad0 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74  nc[] of informat
17ae0 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
17af0 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
17b00 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a  or that node..**
17b10 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f  .** AggInfo.pGro
17b20 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f  upBy and AggInfo
17b30 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69  .aFunc.pExpr poi
17b40 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74  nt to fields wit
17b50 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69  hin the.** origi
17b60 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63  nal Select struc
17b70 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69  ture that descri
17b80 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73  bes the SELECT s
17b90 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65  tatement.  These
17ba0 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f  .** fields do no
17bb0 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65  t need to be fre
17bc0 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61  ed when dealloca
17bd0 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f  ting the AggInfo
17be0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
17bf0 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a  truct AggInfo {.
17c00 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b    u8 directMode;
17c10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72            /* Dir
17c20 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f  ect rendering mo
17c30 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61  de means take da
17c40 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20  ta directly.    
17c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c60 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f        ** from so
17c70 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68  urce tables rath
17c80 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63  er than from acc
17c90 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75  umulators */.  u
17ca0 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b  8 useSortingIdx;
17cb0 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72         /* In dir
17cc0 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65  ect mode, refere
17cd0 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20  nce the sorting 
17ce0 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20  index rather.   
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d00 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74         ** than t
17d10 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
17d20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
17d30 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Idx;         /* 
17d40 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
17d50 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
17d60 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  ex */.  int sort
17d70 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20  ingIdxPTab;     
17d80 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
17d90 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   of pseudo-table
17da0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69   */.  int nSorti
17db0 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a  ngColumn;     /*
17dc0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
17dd0 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  ns in the sortin
17de0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
17df0 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20   mnReg, mxReg;  
17e00 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66       /* Range of
17e10 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
17e20 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e  ated for aCol an
17e30 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70  d aFunc */.  Exp
17e40 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
17e50 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75       /* The grou
17e60 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20  p by clause */. 
17e70 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
17e80 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20  col {    /* For 
17e90 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64  each column used
17ea0 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65   in source table
17eb0 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  s */.    Table *
17ec0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
17ed0 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c    /* Source tabl
17ee0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61  e */.    int iTa
17ef0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
17f00 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
17f10 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  er of the source
17f20 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
17f30 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t iColumn;      
17f40 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
17f50 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74   number within t
17f60 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
17f70 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74  */.    int iSort
17f80 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  erColumn;       
17f90 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
17fa0 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
17fb0 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74  index */.    int
17fc0 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
17fd0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
17fe0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
17ff0 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
18000 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  r */.    Expr *p
18010 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
18020 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61    /* The origina
18030 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  l expression */.
18040 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74    } *aCol;.  int
18050 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
18060 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
18070 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69  f used entries i
18080 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e  n aCol[] */.  in
18090 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20  t nAccumulator; 
180a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
180b0 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  of columns that 
180c0 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20  show through to 
180d0 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20  the output..    
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f        ** Additio
18100 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  nal columns are 
18110 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72  used only as par
18120 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20  ameters to.     
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18140 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74       ** aggregat
18150 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  e functions */. 
18160 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
18170 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20  func {   /* For 
18180 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66  each aggregate f
18190 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45  unction */.    E
181a0 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
181b0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
181c0 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74  ssion encoding t
181d0 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
181e0 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
181f0 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  c;          /* T
18200 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
18210 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  ction implementa
18220 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
18230 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
18240 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
18250 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
18260 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
18270 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73   */.    int iDis
18280 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20  tinct;          
18290 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61   /* Ephemeral ta
182a0 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f  ble used to enfo
182b0 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a  rce DISTINCT */.
182c0 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e    } *aFunc;.  in
182d0 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20  t nFunc;        
182e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
182f0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46  of entries in aF
18300 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unc[] */.};../*.
18310 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
18320 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65  ynVar is a signe
18330 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65  d integer, eithe
18340 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62  r 16-bit or 32-b
18350 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69  it..** Usually i
18360 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42  t is 16-bits.  B
18370 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ut if SQLITE_MAX
18380 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
18390 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74   is greater.** t
183a0 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76  han 32767 we hav
183b0 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d  e to make it 32-
183c0 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20  bit.  16-bit is 
183d0 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73  preferred becaus
183e0 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73  e.** it uses les
183f0 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20  s memory in the 
18400 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69  Expr object, whi
18410 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f  ch is a big memo
18420 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79  ry user.** in sy
18430 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20  stems with lots 
18440 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74  of prepared stat
18450 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77  ements.  And few
18460 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a   applications.**
18470 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20   need more than 
18480 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76  about 10 or 20 v
18490 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73  ariables.  But s
184a0 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72  ome extreme user
184b0 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76  s want.** to hav
184c0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
184d0 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20  ments with over 
184e0 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c  32767 variables,
184f0 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a   and for them.**
18500 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61   the option is a
18510 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d  vailable (at com
18520 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23  pile-time)..*/.#
18530 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
18540 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33  RIABLE_NUMBER<=3
18550 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36  2767.typedef i16
18560 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79   ynVar;.#else.ty
18570 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b  pedef int ynVar;
18580 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
18590 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65  ach node of an e
185a0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
185b0 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61   parse tree is a
185c0 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
185d0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
185e0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69  .**.** Expr.op i
185f0 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68  s the opcode. Th
18600 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72  e integer parser
18610 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65   token codes are
18620 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70   reused.** as op
18630 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20  codes here. For 
18640 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72  example, the par
18650 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47  ser defines TK_G
18660 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  E to be an integ
18670 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65  er.** code repre
18680 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22  senting the ">="
18690 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20   operator. This 
186a0 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64  same integer cod
186b0 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74  e is reused.** t
186c0 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20  o represent the 
186d0 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d  greater-than-or-
186e0 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f  equal-to operato
186f0 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
18700 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a  ion.** tree..**.
18710 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
18720 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c  sion is an SQL l
18730 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47  iteral (TK_INTEG
18740 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b  ER, TK_FLOAT, TK
18750 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f  _BLOB,.** or TK_
18760 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78  STRING), then Ex
18770 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
18780 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68  s the text of th
18790 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49  e SQL literal. I
187a0 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
187b0 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c  ion is a variabl
187c0 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c  e (TK_VARIABLE),
187d0 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
187e0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a   contains the.**
187f0 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
18800 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
18810 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
18820 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
18830 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
18840 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
18850 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
18860 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
18870 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
18880 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
18890 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
188a0 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
188b0 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
188c0 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
188d0 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
188e0 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
188f0 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
18900 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
18910 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
18920 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
18930 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
18940 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
18950 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
18960 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
18970 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
18980 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
18990 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
189a0 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
189b0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
189c0 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
189d0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
189e0 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
189f0 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
18a00 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
18a10 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
18a20 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
18a30 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
18a40 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
18a50 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
18a60 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
18a70 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a  st is.** valid..
18a80 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73  **.** An express
18a90 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
18aa0 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65  ID or ID.ID refe
18ab0 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69  rs to a column i
18ac0 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  n a table..** Fo
18ad0 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f  r such expressio
18ae0 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73  ns, Expr.op is s
18af0 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20  et to TK_COLUMN 
18b00 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20  and Expr.iTable 
18b10 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65  is.** the intege
18b20 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  r cursor number 
18b30 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72  of a VDBE cursor
18b40 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61   pointing to tha
18b50 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45  t table and.** E
18b60 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74  xpr.iColumn is t
18b70 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  he column number
18b80 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
18b90 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68  c column.  If th
18ba0 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  e.** expression 
18bb0 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73  is used as a res
18bc0 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67  ult in an aggreg
18bd0 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ate SELECT, then
18be0 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73   the.** value is
18bf0 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20   also stored in 
18c00 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f  the Expr.iAgg co
18c10 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72  lumn in the aggr
18c20 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a  egate so that.**
18c30 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73   it can be acces
18c40 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67  sed after all ag
18c50 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d  gregates are com
18c60 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  puted..**.** If 
18c70 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
18c80 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72  s an unbound var
18c90 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20  iable marker (a 
18ca0 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a  question mark.**
18cb0 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
18cc0 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
18cd0 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
18ce0 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
18cf0 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62  he index.** numb
18d00 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69  er for that vari
18d10 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  able..**.** If t
18d20 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
18d30 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e   a subquery then
18d40 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f   Expr.iColumn ho
18d50 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  lds an integer.*
18d60 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  * register numbe
18d70 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
18d80 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
18d90 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65  ubquery.  If the
18da0 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76  .** subquery giv
18db0 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65  es a constant re
18dc0 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c  sult, then iTabl
18dd0 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65  e is -1.  If the
18de0 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76   subquery.** giv
18df0 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61  es a different a
18e00 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65  nswer at differe
18e10 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  nt times during 
18e20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73  statement proces
18e30 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61  sing.** then iTa
18e40 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65  ble is the addre
18e50 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69  ss of a subrouti
18e60 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ne that computes
18e70 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a   the subquery..*
18e80 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
18e90 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
18ea0 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
18eb0 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
18ec0 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
18ed0 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
18ee0 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
18ef0 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
18f00 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
18f10 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
18f20 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
18f30 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43  ion..**.** ALLOC
18f40 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a  ATION NOTES:.**.
18f50 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ** Expr objects 
18f60 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66  can use a lot of
18f70 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e   memory space in
18f80 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
18f90 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65  .  To.** help re
18fa0 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75  duce memory requ
18fb0 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69  irements, someti
18fc0 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  mes an Expr obje
18fd0 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72  ct will be.** tr
18fe0 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f  uncated.  And to
18ff0 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
19000 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  er of memory all
19010 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69  ocations, someti
19020 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f  mes.** two or mo
19030 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  re Expr objects 
19040 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69  will be stored i
19050 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72  n a single memor
19060 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a  y allocation,.**
19070 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45   together with E
19080 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e  xpr.zToken strin
19090 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gs..**.** If the
190a0 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20   EP_Reduced and 
190b0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
190c0 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a  gs are set when.
190d0 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  ** an Expr objec
190e0 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20  t is truncated. 
190f0 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64   When EP_Reduced
19100 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c   is set, then al
19110 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45  l.** the child E
19120 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74  xpr objects in t
19130 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e  he Expr.pLeft an
19140 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75  d Expr.pRight su
19150 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f  btrees.** are co
19160 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
19170 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61  he same memory a
19180 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65  llocation.  Note
19190 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a  , however, that.
191a0 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20  ** the subtrees 
191b0 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  in Expr.x.pList 
191c0 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  or Expr.x.pSelec
191d0 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70  t are always sep
191e0 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  arately.** alloc
191f0 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73  ated, regardless
19200 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
19210 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  ot EP_Reduced is
19220 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   set..*/.struct 
19230 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Expr {.  u8 op; 
19240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19250 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72  /* Operation per
19260 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e  formed by this n
19270 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ode */.  char af
19280 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
19290 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
192a0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  of the column or
192b0 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75   0 if not a colu
192c0 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67  mn */.  u32 flag
192d0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
192e0 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e  * Various flags.
192f0 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77    EP_* See below
19300 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
19310 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20    char *zToken; 
19320 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
19330 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65  n value. Zero te
19340 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71  rminated and deq
19350 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  uoted */.    int
19360 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20   iValue;        
19370 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74      /* Non-negat
19380 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ive integer valu
19390 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
193a0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
193b0 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
193c0 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
193d0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
193e0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
193f0 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
19400 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
19410 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
19420 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
19430 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
19440 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
19450 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
19460 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
19470 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
19480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45  **********/..  E
194c0 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20  xpr *pLeft;     
194d0 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75        /* Left su
194e0 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20  bnode */.  Expr 
194f0 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20  *pRight;        
19500 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f    /* Right subno
19510 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  de */.  union {.
19520 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c      ExprList *pL
19530 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d  ist;     /* op =
19540 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
19550 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54  ECT, CASE, FUNCT
19560 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a  ION, BETWEEN */.
19570 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
19580 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78  ect;     /* EP_x
19590 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20  IsSelect and op 
195a0 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
195b0 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a  LECT */.  } x;..
195c0 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52    /* If the EP_R
195d0 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73  educed flag is s
195e0 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
195f0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
19600 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
19610 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
19620 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
19630 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
19640 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
19650 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
19660 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
19670 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
19680 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
19690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
196a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
196b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
196c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23  ************/..#
196d0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
196e0 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
196f0 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
19700 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66      /* Height of
19710 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64   the tree headed
19720 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
19730 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54  .#endif.  int iT
19740 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
19750 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
19760 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
19770 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f  table holding co
19780 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
197a0 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65   TK_REGISTER: re
197b0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20  gister number.  
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49         ** TK_TRI
197e0 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20  GGER: 1 -> new, 
197f0 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20  0 -> old.       
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79    ** EP_Unlikely
19820 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d  :  134217728 tim
19830 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20  es likelihood.  
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19850 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
19860 45 43 54 3a 20 31 73 74 20 72 65 67 69 73 74 65  ECT: 1st registe
19870 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65 63 74  r of result vect
19880 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43  or */.  ynVar iC
19890 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
198a0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  * TK_COLUMN: col
198b0 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66  umn index.  -1 f
198c0 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20  or rowid..      
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c     ** TK_VARIABL
198f0 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  E: variable numb
19900 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29  er (always >= 1)
19910 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19920 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
19930 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20  _SELECT_COLUMN: 
19940 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65  column of the re
19950 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20  sult vector */. 
19960 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
19970 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
19980 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
19990 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
199a0 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
199b0 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
199c0 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
199d0 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
199e0 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
199f0 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  in */.  u8 op2; 
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19a10 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
19a20 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
19a30 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a50 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
19a60 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
19a70 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a90 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
19aa0 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
19ab0 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
19ac0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
19ad0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
19ae0 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
19af0 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
19b00 4e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  N */.  union {. 
19b10 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
19b20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
19b30 43 4f 4c 55 4d 4e 3a 20 54 61 62 6c 65 20 63 6f  COLUMN: Table co
19b40 6e 74 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 2e  ntaining column.
19b50 20 43 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20   Can be NULL.   
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61          ** for a
19b80 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 69 6e   column of an in
19b90 64 65 78 20 6f 6e 20 61 6e 20 65 78 70 72 65 73  dex on an expres
19ba0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 57 69 6e 64  sion */.    Wind
19bb0 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20 20  ow *pWin;       
19bc0 20 20 20 2f 2a 20 54 4b 5f 46 55 4e 43 54 49 4f     /* TK_FUNCTIO
19bd0 4e 3a 20 57 69 6e 64 6f 77 20 64 65 66 69 6e 69  N: Window defini
19be0 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 66 75 6e  tion for the fun
19bf0 63 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  c */.    struct 
19c00 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
19c10 2f 2a 20 54 4b 5f 49 4e 2c 20 54 4b 5f 53 45 4c  /* TK_IN, TK_SEL
19c20 45 43 54 2c 20 61 6e 64 20 54 4b 5f 45 58 49 53  ECT, and TK_EXIS
19c30 54 53 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20  TS */.      int 
19c40 69 41 64 64 72 3b 20 20 20 20 20 20 20 20 20 20  iAddr;          
19c50 20 20 20 2f 2a 20 53 75 62 72 6f 75 74 69 6e 65     /* Subroutine
19c60 20 65 6e 74 72 79 20 61 64 64 72 65 73 73 20 2a   entry address *
19c70 2f 0a 20 20 20 20 20 20 69 6e 74 20 72 65 67 52  /.      int regR
19c80 65 74 75 72 6e 3b 20 20 20 20 20 20 20 20 20 2f  eturn;         /
19c90 2a 20 52 65 67 69 73 74 65 72 20 75 73 65 64 20  * Register used 
19ca0 74 6f 20 68 6f 6c 64 20 72 65 74 75 72 6e 20 61  to hold return a
19cb0 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 7d 20  ddress */.    } 
19cc0 73 75 62 3b 0a 20 20 7d 20 79 3b 0a 7d 3b 0a 0a  sub;.  } y;.};..
19cd0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
19ce0 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
19cf0 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
19d00 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
19d10 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
19d20 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78   EP_FromJoin  0x
19d30 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e  000001 /* Origin
19d40 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47  ates in ON/USING
19d50 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72   clause of outer
19d60 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
19d70 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78   EP_Agg       0x
19d80 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69  000002 /* Contai
19d90 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  ns one or more a
19da0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
19db0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ns */.#define EP
19dc0 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30 30 30  _HasFunc   0x000
19dd0 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  004 /* Contains 
19de0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63  one or more func
19df0 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e  tions of any kin
19e00 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
19e10 46 69 78 65 64 43 6f 6c 20 20 30 78 30 30 30 30  FixedCol  0x0000
19e20 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20  08 /* TK_Column 
19e30 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 66 69 78  with a known fix
19e40 65 64 20 76 61 6c 75 65 20 2a 2f 0a 23 64 65 66  ed value */.#def
19e50 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20  ine EP_Distinct 
19e60 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67   0x000010 /* Agg
19e70 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
19e80 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65  with DISTINCT ke
19e90 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
19ea0 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78   EP_VarSelect 0x
19eb0 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63  000020 /* pSelec
19ec0 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c  t is correlated,
19ed0 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f   not constant */
19ee0 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51  .#define EP_DblQ
19ef0 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f  uoted 0x000040 /
19f00 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72  * token.z was or
19f10 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e  iginally in "...
19f20 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  " */.#define EP_
19f30 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30  InfixFunc 0x0000
19f40 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61  80 /* True for a
19f50 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e  n infix function
19f60 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74  : LIKE, GLOB, et
19f70 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  c */.#define EP_
19f80 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31  Collate   0x0001
19f90 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
19fa0 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45  ins a TK_COLLATE
19fb0 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65   operator */.#de
19fc0 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20  fine EP_Generic 
19fd0 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67    0x000200 /* Ig
19fe0 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20  nore COLLATE or 
19ff0 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73  affinity on this
1a000 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65   tree */.#define
1a010 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78   EP_IntValue  0x
1a020 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65  000400 /* Intege
1a030 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65  r value containe
1a040 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f  d in u.iValue */
1a050 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53  .#define EP_xIsS
1a060 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f  elect 0x000800 /
1a070 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  * x.pSelect is v
1a080 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20  alid (otherwise 
1a090 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23  x.pList is) */.#
1a0a0 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20  define EP_Skip  
1a0b0 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20      0x001000 /* 
1a0c0 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20  COLLATE, AS, or 
1a0d0 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66  UNLIKELY */.#def
1a0e0 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20  ine EP_Reduced  
1a0f0 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70   0x002000 /* Exp
1a100 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45  r struct EXPR_RE
1a110 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20  DUCEDSIZE bytes 
1a120 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
1a130 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30  EP_TokenOnly 0x0
1a140 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  04000 /* Expr st
1a150 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  ruct EXPR_TOKENO
1a160 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  NLYSIZE bytes on
1a170 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
1a180 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30 38  _Static    0x008
1a190 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d  000 /* Held in m
1a1a0 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e  emory not obtain
1a1b0 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
1a1c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d   */.#define EP_M
1a1d0 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30  emToken  0x01000
1a1e0 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c  0 /* Need to sql
1a1f0 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70  ite3DbFree() Exp
1a200 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66  r.zToken */.#def
1a210 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20  ine EP_NoReduce 
1a220 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e   0x020000 /* Can
1a230 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55  not EXPRDUP_REDU
1a240 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a  CE this Expr */.
1a250 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b  #define EP_Unlik
1a260 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a  ely  0x040000 /*
1a270 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c   unlikely() or l
1a280 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63  ikelihood() func
1a290 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
1a2a0 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30  EP_ConstFunc 0x0
1a2b0 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54  80000 /* A SQLIT
1a2c0 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
1a2d0 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63  or _SLOCHNG func
1a2e0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
1a2f0 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31  EP_CanBeNull 0x1
1a300 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20  00000 /* Can be 
1a310 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54  null despite NOT
1a320 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
1a330 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
1a340 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30 30  ubquery  0x20000
1a350 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
1a360 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f  ns a TK_SELECT o
1a370 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
1a380 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20  ne EP_Alias     
1a390 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61  0x400000 /* Is a
1a3a0 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65  n alias for a re
1a3b0 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20  sult set column 
1a3c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65  */.#define EP_Le
1a3d0 61 66 20 20 20 20 20 20 30 78 38 30 30 30 30 30  af      0x800000
1a3e0 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20   /* Expr.pLeft, 
1a3f0 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c  .pRight, .u.pSel
1a400 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a  ect all NULL */.
1a410 23 64 65 66 69 6e 65 20 45 50 5f 57 69 6e 46 75  #define EP_WinFu
1a420 6e 63 20 20 30 78 31 30 30 30 30 30 30 20 2f 2a  nc  0x1000000 /*
1a430 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20 77 69 74   TK_FUNCTION wit
1a440 68 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 73 65  h Expr.y.pWin se
1a450 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
1a460 53 75 62 72 74 6e 20 20 20 30 78 32 30 30 30 30  Subrtn   0x20000
1a470 30 30 20 2f 2a 20 55 73 65 73 20 45 78 70 72 2e  00 /* Uses Expr.
1a480 79 2e 73 75 62 2e 20 54 4b 5f 49 4e 2c 20 5f 53  y.sub. TK_IN, _S
1a490 45 4c 45 43 54 2c 20 6f 72 20 5f 45 58 49 53 54  ELECT, or _EXIST
1a4a0 53 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  S */.#define EP_
1a4b0 51 75 6f 74 65 64 20 20 20 30 78 34 30 30 30 30  Quoted   0x40000
1a4c0 30 30 20 2f 2a 20 54 4b 5f 49 44 20 77 61 73 20  00 /* TK_ID was 
1a4d0 6f 72 69 67 69 6e 61 6c 6c 79 20 71 75 6f 74 65  originally quote
1a4e0 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  d */../*.** The 
1a4f0 45 50 5f 50 72 6f 70 61 67 61 74 65 20 6d 61 73  EP_Propagate mas
1a500 6b 20 69 73 20 61 20 73 65 74 20 6f 66 20 70 72  k is a set of pr
1a510 6f 70 65 72 74 69 65 73 20 74 68 61 74 20 61 75  operties that au
1a520 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72 6f 70  tomatically prop
1a530 61 67 61 74 65 0a 2a 2a 20 75 70 77 61 72 64 73  agate.** upwards
1a540 20 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e 6f 64   into parent nod
1a550 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  es..*/.#define E
1a560 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f  P_Propagate (EP_
1a570 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75  Collate|EP_Subqu
1a580 65 72 79 7c 45 50 5f 48 61 73 46 75 6e 63 29 0a  ery|EP_HasFunc).
1a590 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
1a5a0 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
1a5b0 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
1a5c0 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
1a5d0 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
1a5e0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
1a5f0 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
1a600 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
1a610 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
1a620 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
1a630 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50  sAllProperty(E,P
1a640 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
1a650 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
1a660 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
1a670 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
1a680 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
1a690 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
1a6a0 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
1a6b0 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
1a6c0 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41  * The ExprSetVVA
1a6d0 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f  Property() macro
1a6e0 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72   is used for Ver
1a6f0 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
1a700 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63  ation,.** and Ac
1a710 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79  creditation only
1a720 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65  .  It works like
1a730 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
1a740 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a  () during VVA.**
1a750 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69   processes but i
1a760 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65  s a no-op for de
1a770 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  livery..*/.#ifde
1a780 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
1a790 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
1a7a0 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  VAProperty(E,P) 
1a7b0 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
1a7c0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1a7d0 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
1a7e0 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ty(E,P).#endif..
1a7f0 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
1a800 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
1a810 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
1a820 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d  quired by a norm
1a830 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63  al Expr.** struc
1a840 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
1a850 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
1a860 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
1a870 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20  n Expr.flags.** 
1a880 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
1a890 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
1a8a0 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
1a8b0 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
1a8c0 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
1a8d0 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
1a8e0 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
1a8f0 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
1a900 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
1a910 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
1a920 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
1a930 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
1a940 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
1a950 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
1a960 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
1a970 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
1a980 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
1a990 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
1a9a0 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
1a9b0 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
1a9c0 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
1a9d0 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
1a9e0 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  nt.** above sqli
1a9f0 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
1aa00 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
1aa10 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
1aa20 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
1aa30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
1aa40 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
1aa50 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
1aa60 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
1aa70 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
1aa80 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
1aa90 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
1aaa0 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
1aab0 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
1aac0 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
1aad0 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
1aae0 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
1aaf0 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
1ab00 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
1ab10 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
1ab20 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
1ab30 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
1ab40 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
1ab50 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
1ab60 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
1ab70 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
1ab80 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
1ab90 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
1aba0 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
1abb0 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
1abc0 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
1abd0 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
1abe0 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
1abf0 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
1ac00 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
1ac10 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
1ac20 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
1ac30 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
1ac40 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
1ac50 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
1ac60 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
1ac70 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
1ac80 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
1ac90 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
1aca0 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
1acb0 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
1acc0 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
1acd0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
1ace0 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
1acf0 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
1ad00 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
1ad10 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
1ad20 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
1ad30 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
1ad40 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
1ad50 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
1ad60 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
1ad70 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
1ad80 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
1ad90 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
1ada0 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
1adb0 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
1adc0 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
1add0 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
1ade0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1adf0 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
1ae00 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
1ae10 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
1ae20 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20  t_item { /* For 
1ae30 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
1ae40 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  in the list */. 
1ae50 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
1ae60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1ae70 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
1ae80 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
1ae90 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
1aea0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
1aeb0 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61  /* Token associa
1aec0 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78  ted with this ex
1aed0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
1aee0 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
1aef0 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
1af00 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
1af10 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
1af20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20    u8 sortOrder; 
1af30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66            /* 1 f
1af40 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72  or DESC or 0 for
1af50 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69   ASC */.    unsi
1af60 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20  gned done :1;   
1af70 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
1af80 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
1af90 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
1afa0 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  ished */.    uns
1afb0 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62  igned bSpanIsTab
1afc0 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f   :1; /* zSpan ho
1afd0 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c  lds DB.TABLE.COL
1afe0 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  UMN */.    unsig
1aff0 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b  ned reusable :1;
1b000 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65     /* Constant e
1b010 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75  xpression is reu
1b020 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73  sable */.    uns
1b030 69 67 6e 65 64 20 62 53 6f 72 74 65 72 52 65 66  igned bSorterRef
1b040 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20 65 76   :1; /* Defer ev
1b050 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c 20 61  aluation until a
1b060 66 74 65 72 20 73 6f 72 74 69 6e 67 20 2a 2f 0a  fter sorting */.
1b070 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
1b080 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
1b090 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43     u16 iOrderByC
1b0a0 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  ol;      /* For 
1b0b0 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e  ORDER BY, column
1b0c0 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c   number in resul
1b0d0 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20  t set */.       
1b0e0 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20   u16 iAlias;    
1b0f0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1b100 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61  into Parse.aAlia
1b110 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f  s[] for zName */
1b120 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20  .      } x;.    
1b130 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72    int iConstExpr
1b140 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67  Reg;      /* Reg
1b150 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45  ister in which E
1b160 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63  xpr value is cac
1b170 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a  hed */.    } u;.
1b180 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
1b190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1b1a0 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68 20  e slot for each 
1b1b0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
1b1c0 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
1b1d0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1b1e0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1b1f0 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d  e can hold a sim
1b200 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e  ple list of iden
1b210 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68  tifiers,.** such
1b220 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c   as the list "a,
1b230 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c  b,c" in the foll
1b240 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  owing statements
1b250 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53  :.**.**      INS
1b260 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
1b270 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a  ) VALUES ...;.**
1b280 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
1b290 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c  EX idx ON t(a,b,
1b2a0 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  c);.**      CREA
1b2b0 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20  TE TRIGGER trig 
1b2c0 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e  BEFORE UPDATE ON
1b2d0 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a   t(a,b,c) ...;.*
1b2e0 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e  *.** The IdList.
1b2f0 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75  a.idx field is u
1b300 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c  sed when the IdL
1b310 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  ist represents t
1b320 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f  he list of.** co
1b330 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72  lumn names after
1b340 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e   a table name in
1b350 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
1b360 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74  ment.  In the st
1b370 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20  atement.**.**   
1b380 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
1b390 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a  a,b,c) ....**.**
1b3a0 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b   If "a" is the k
1b3b0 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61  -th column of ta
1b3c0 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64  ble "t", then Id
1b3d0 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b  List.a[0].idx==k
1b3e0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69  ..*/.struct IdLi
1b3f0 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64  st {.  struct Id
1b400 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
1b410 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1b420 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
1b430 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20   identifier */. 
1b440 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20     int idx;     
1b450 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
1b460 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c   some Table.aCol
1b470 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e  [] of a column n
1b480 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  amed zName */.  
1b490 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b  } *a;.  int nId;
1b4a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b4b0 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  er of identifier
1b4c0 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
1b4d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
1b4e0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1b4f0 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65  re describes the
1b500 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
1b510 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1b520 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c  nt..** Each tabl
1b530 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e  e or subquery in
1b540 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1b550 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65   is a separate e
1b560 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65  lement of.** the
1b570 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72   SrcList.a[] arr
1b580 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74  ay..**.** With t
1b590 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d  he addition of m
1b5a0 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
1b5b0 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f   support, the fo
1b5c0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1b5d0 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65  e.** can also be
1b5e0 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62   used to describ
1b5f0 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  e a particular t
1b600 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65  able such as the
1b610 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69   table that.** i
1b620 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e  s modified by an
1b630 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c   INSERT, DELETE,
1b640 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
1b650 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61  ment.  In standa
1b660 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20  rd SQL,.** such 
1b670 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20  a table must be 
1b680 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49  a simple name: I
1b690 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74  D.  But in SQLit
1b6a0 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e  e, the table can
1b6b0 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74  .** now be ident
1b6c0 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62  ified by a datab
1b6d0 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c  ase name, a dot,
1b6e0 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
1b6f0 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a  name: ID.ID..**.
1b700 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20  ** The jointype 
1b710 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69  starts out showi
1b720 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65  ng the join type
1b730 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72   between the cur
1b740 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e  rent table.** an
1b750 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65  d the next table
1b760 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54   on the list.  T
1b770 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73  he parser builds
1b780 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77   the list this w
1b790 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74  ay..** But sqlit
1b7a0 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f  e3SrcListShiftJo
1b7b0 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73  inType() later s
1b7c0 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79  hifts the jointy
1b7d0 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68  pes so that each
1b7e0 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70  .** jointype exp
1b7f0 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20  resses the join 
1b800 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c  between the tabl
1b810 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
1b820 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  us table..**.** 
1b830 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66  In the colUsed f
1b840 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f  ield, the high-o
1b850 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33  rder bit (bit 63
1b860 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  ) is set if the 
1b870 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e  table.** contain
1b880 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63  s more than 63 c
1b890 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36  olumns and the 6
1b8a0 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f  4-th or later co
1b8b0 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  lumn is used..*/
1b8c0 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20  .struct SrcList 
1b8d0 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20  {.  int nSrc;   
1b8e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b8f0 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  f tables or subq
1b900 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52  ueries in the FR
1b910 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  OM clause */.  u
1b920 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  32 nAlloc;      
1b930 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
1b940 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69  ries allocated i
1b950 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20  n a[] below */. 
1b960 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
1b970 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d  item {.    Schem
1b980 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20  a *pSchema;  /* 
1b990 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20  Schema to which 
1b9a0 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78  this item is fix
1b9b0 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
1b9c0 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e  zDatabase;  /* N
1b9d0 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
1b9e0 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62  holding this tab
1b9f0 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
1ba00 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
1ba10 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1ba20 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41   */.    char *zA
1ba30 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65  lias;     /* The
1ba40 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22   "B" part of a "
1ba50 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20  A AS B" phrase. 
1ba60 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41   zName is the "A
1ba70 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  " */.    Table *
1ba80 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e  pTab;      /* An
1ba90 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65   SQL table corre
1baa0 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d  sponding to zNam
1bab0 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  e */.    Select 
1bac0 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20  *pSelect;  /* A 
1bad0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1bae0 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f   used in place o
1baf0 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a  f a table name *
1bb00 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69  /.    int addrFi
1bb10 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65  llSub;  /* Addre
1bb20 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65  ss of subroutine
1bb30 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73   to manifest a s
1bb40 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69  ubquery */.    i
1bb50 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20  nt regReturn;   
1bb60 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1bb70 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72  ding return addr
1bb80 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53  ess of addrFillS
1bb90 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ub */.    int re
1bba0 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52  gResult;    /* R
1bbb0 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
1bbc0 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f   results of a co
1bbd0 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20  -routine */.    
1bbe0 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75  struct {.      u
1bbf0 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20  8 jointype;     
1bc00 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e   /* Type of join
1bc10 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 74 61   between this ta
1bc20 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
1bc30 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ious */.      un
1bc40 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65  signed notIndexe
1bc50 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  d :1;    /* True
1bc60 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e   if there is a N
1bc70 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
1bc80 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1bc90 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42 79 20  ned isIndexedBy 
1bca0 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
1bcb0 20 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44   there is an IND
1bcc0 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a  EXED BY clause *
1bcd0 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1bce0 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20   isTabFunc :1;  
1bcf0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61     /* True if ta
1bd00 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74  ble-valued-funct
1bd10 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20  ion syntax */.  
1bd20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43      unsigned isC
1bd30 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f  orrelated :1;  /
1bd40 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75  * True if sub-qu
1bd50 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ery is correlate
1bd60 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  d */.      unsig
1bd70 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65  ned viaCoroutine
1bd80 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65   :1;  /* Impleme
1bd90 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75  nted as a co-rou
1bda0 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  tine */.      un
1bdb0 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69  signed isRecursi
1bdc0 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ve :1;   /* True
1bdd0 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72   for recursive r
1bde0 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48  eference in WITH
1bdf0 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20   */.    } fg;.  
1be00 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
1be10 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
1be20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
1be30 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
1be40 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
1be50 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
1be60 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
1be70 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
1be80 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
1be90 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
1bea0 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
1beb0 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
1bec0 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
1bed0 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
1bee0 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70  if column N of p
1bef0 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
1bf00 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
1bf10 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42   char *zIndexedB
1bf20 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66  y;    /* Identif
1bf30 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45  ier from "INDEXE
1bf40 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63  D BY <zIndex>" c
1bf50 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45  lause */.      E
1bf60 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72  xprList *pFuncAr
1bf70 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73  g;  /* Arguments
1bf80 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   to table-valued
1bf90 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20  -function */.   
1bfa0 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78   } u1;.    Index
1bfb0 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20   *pIBIndex;  /* 
1bfc0 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
1bfd0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1bfe0 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a   u1.zIndexedBy *
1bff0 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  /.  } a[1];     
1c000 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
1c010 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64  ntry for each id
1c020 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20  entifier on the 
1c030 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
1c040 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75  * Permitted valu
1c050 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73  es of the SrcLis
1c060 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65  t.a.jointype fie
1c070 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  ld.*/.#define JT
1c080 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30  _INNER     0x000
1c090 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64  1    /* Any kind
1c0a0 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f   of inner or cro
1c0b0 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  ss join */.#defi
1c0c0 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20  ne JT_CROSS     
1c0d0 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70  0x0002    /* Exp
1c0e0 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65  licit use of the
1c0f0 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a   CROSS keyword *
1c100 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54  /.#define JT_NAT
1c110 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20  URAL   0x0004   
1c120 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22   /* True for a "
1c130 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f  natural" join */
1c140 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54  .#define JT_LEFT
1c150 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20        0x0008    
1c160 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f  /* Left outer jo
1c170 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1c180 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31  _RIGHT     0x001
1c190 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75  0    /* Right ou
1c1a0 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
1c1b0 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20  ine JT_OUTER    
1c1c0 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68   0x0020    /* Th
1c1d0 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72  e "OUTER" keywor
1c1e0 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  d is present */.
1c1f0 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52  #define JT_ERROR
1c200 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f       0x0040    /
1c210 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73  * unknown or uns
1c220 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79  upported join ty
1c230 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c  pe */.../*.** Fl
1c240 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20  ags appropriate 
1c250 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61  for the wctrlFla
1c260 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  gs parameter of 
1c270 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
1c280 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57  n().** and the W
1c290 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c  hereInfo.wctrlFl
1c2a0 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a  ags member..**.*
1c2b0 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1c2c0 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
1c2d0 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
1c2e0 20 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49      WHERE_USE_LI
1c2f0 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65 64  MIT  == SF_Fixed
1c300 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65  Limit.*/.#define
1c310 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e   WHERE_ORDERBY_N
1c320 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f  ORMAL   0x0000 /
1c330 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69  * No-op */.#defi
1c340 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1c350 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31  _MIN      0x0001
1c360 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
1c370 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28  cessing for min(
1c380 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
1c390 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1c3a0 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20  MAX      0x0002 
1c3b0 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
1c3c0 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29  essing for max()
1c3d0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1c3e0 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44   WHERE_ONEPASS_D
1c3f0 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f  ESIRED  0x0004 /
1c400 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65  * Want to do one
1c410 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c  -pass UPDATE/DEL
1c420 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ETE */.#define W
1c430 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c  HERE_ONEPASS_MUL
1c440 54 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a 20  TIROW 0x0008 /* 
1c450 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69  ONEPASS is ok wi
1c460 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
1c470 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c480 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
1c490 20 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20     0x0010 /* Ok 
1c4a0 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
1c4b0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
1c4c0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c4d0 4f 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20 20  OR_SUBCLAUSE    
1c4e0 20 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63 65   0x0020 /* Proce
1c4f0 73 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45 52  ssing a sub-WHER
1c500 45 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20 20  E as part of.   
1c510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c530 20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74     ** the OR opt
1c540 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64  imization  */.#d
1c550 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55  efine WHERE_GROU
1c560 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30  PBY          0x0
1c570 30 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20  040 /* pOrderBy 
1c580 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55  is really a GROU
1c590 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
1c5a0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59  WHERE_DISTINCTBY
1c5b0 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a         0x0080 /*
1c5c0 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61   pOrderby is rea
1c5d0 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63  lly a DISTINCT c
1c5e0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1c5f0 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54   WHERE_WANT_DIST
1c600 49 4e 43 54 20 20 20 20 30 78 30 31 30 30 20 2f  INCT    0x0100 /
1c610 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65  * All output nee
1c620 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63  ds to be distinc
1c630 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
1c640 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20  RE_SORTBYGROUP  
1c650 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53 75      0x0200 /* Su
1c660 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65  pport sqlite3Whe
1c670 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a  reIsSorted() */.
1c680 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45  #define WHERE_SE
1c690 45 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30  EK_TABLE       0
1c6a0 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x0400 /* Do not 
1c6b0 64 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d  defer seeks on m
1c6c0 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ain table */.#de
1c6d0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1c6e0 42 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30 38  BY_LIMIT    0x08
1c6f0 30 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49  00 /* ORDERBY+LI
1c700 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72  MIT on the inner
1c710 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65   loop */.#define
1c720 20 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51   WHERE_SEEK_UNIQ
1c730 5f 54 41 42 4c 45 20 20 30 78 31 30 30 30 20 2f  _TABLE  0x1000 /
1c740 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73  * Do not defer s
1c750 65 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20 2a  eeks if unique *
1c760 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1c770 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1c780 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63   0x2000    not c
1c790 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1c7a0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55  .#define WHERE_U
1c7b0 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20  SE_LIMIT        
1c7c0 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68  0x4000 /* Use th
1c7d0 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20  e LIMIT in cost 
1c7e0 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20  estimates */.   
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c800 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30       /*     0x80
1c810 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e  00    not curren
1c820 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20  tly used */../* 
1c830 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
1c840 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
1c850 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
1c860 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  t().*/.#define W
1c870 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f  HERE_DISTINCT_NO
1c880 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49  OP      0  /* DI
1c890 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e  STINCT keyword n
1c8a0 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ot used */.#defi
1c8b0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1c8c0 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f  T_UNIQUE    1  /
1c8d0 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20  * No duplicates 
1c8e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c8f0 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45  _DISTINCT_ORDERE
1c900 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75  D   2  /* All du
1c910 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a  plicates are adj
1c920 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  acent */.#define
1c930 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1c940 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20  UNORDERED 3  /* 
1c950 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73  Duplicates are s
1c960 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  cattered */../*.
1c970 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
1c980 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
1c990 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
1c9a0 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
1c9b0 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
1c9c0 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
1c9d0 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
1c9e0 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
1c9f0 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
1ca00 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
1ca10 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
1ca20 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
1ca30 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
1ca40 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
1ca50 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
1ca60 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
1ca70 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1ca80 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
1ca90 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
1caa0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
1cab0 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
1cac0 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
1cad0 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
1cae0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
1caf0 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
1cb00 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
1cb10 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
1cb20 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
1cb30 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
1cb40 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
1cb50 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
1cb60 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
1cb70 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74  -most.** context
1cb80 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72   is searched fir
1cb90 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68  st.  If no match
1cba0 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
1cbb0 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e  ext outer.** con
1cbc0 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e  text is checked.
1cbd0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74    If there is st
1cbe0 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68  ill no match, th
1cbf0 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a  e next context.*
1cc00 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54  * is checked.  T
1cc10 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74  his process cont
1cc20 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68  inues until eith
1cc30 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  er a match is fo
1cc40 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f  und.** or all co
1cc50 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b  ntexts are check
1cc60 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20  .  When a match 
1cc70 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52  is found, the nR
1cc80 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20  ef member of.** 
1cc90 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74  the context cont
1cca0 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68  aining the match
1ccb0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
1ccc0 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71  .**.** Each subq
1ccd0 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20  uery gets a new 
1cce0 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68  NameContext.  Th
1ccf0 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f  e pNext field po
1cd00 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e  ints to the.** N
1cd10 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68  ameContext in th
1cd20 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20  e parent query. 
1cd30 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73   Thus the proces
1cd40 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68  s of scanning th
1cd50 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1cd60 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   list correspond
1cd70 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74  s to searching t
1cd80 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76  hrough successiv
1cd90 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62  ely outer.** sub
1cda0 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20  queries looking 
1cdb0 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a  for a match..*/.
1cdc0 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
1cdd0 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  xt {.  Parse *pP
1cde0 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  arse;       /* T
1cdf0 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53  he parser */.  S
1ce00 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
1ce10 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  ;   /* One or mo
1ce20 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74  re tables used t
1ce30 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20  o resolve names 
1ce40 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
1ce50 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1ce60 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  t;    /* Optiona
1ce70 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74  l list of result
1ce80 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  -set columns */.
1ce90 20 20 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67      AggInfo *pAg
1cea0 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f  gInfo;   /* Info
1ceb0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67  rmation about ag
1cec0 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73  gregates at this
1ced0 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70   level */.    Up
1cee0 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20  sert *pUpsert;  
1cef0 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43     /* ON CONFLIC
1cf00 54 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61  T clause informa
1cf10 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73  tion from an ups
1cf20 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a  ert */.  } uNC;.
1cf30 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
1cf40 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
1cf50 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
1cf60 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
1cf70 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
1cf80 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
1cf90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
1cfa0 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
1cfb0 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
1cfc0 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1cfd0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1cfe0 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
1cff0 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
1d000 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
1d010 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20    u16 ncFlags;  
1d020 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
1d030 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
1d040 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
1d050 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 57 69  */.  Select *pWi
1d060 6e 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c  nSelect;  /* SEL
1d070 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 66 6f  ECT statement fo
1d080 72 20 61 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e  r any window fun
1d090 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ctions */.};../*
1d0a0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
1d0b0 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43  es for the NameC
1d0c0 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20  ontext, ncFlags 
1d0d0 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  field..**.** Val
1d0e0 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
1d0f0 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20  all checked via 
1d100 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
1d110 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d   NC_HasAgg    ==
1d120 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20   SF_HasAgg.**   
1d130 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d   NC_MinMaxAgg ==
1d140 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d   SF_MinMaxAgg ==
1d150 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
1d160 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e  MAX.**.*/.#defin
1d170 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
1d180 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67  x0001  /* Aggreg
1d190 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
1d1a0 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
1d1b0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72  /.#define NC_Par
1d1c0 74 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f  tIdx   0x0002  /
1d1d0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1d1e0 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e  ing a partial in
1d1f0 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65  dex WHERE */.#de
1d200 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20  fine NC_IsCheck 
1d210 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75    0x0004  /* Tru
1d220 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e  e if resolving n
1d230 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20  ames in a CHECK 
1d240 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
1d250 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75  efine NC_InAggFu
1d260 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72  nc 0x0008  /* Tr
1d270 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20  ue if analyzing 
1d280 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20  arguments to an 
1d290 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  agg func */.#def
1d2a0 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
1d2b0 20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20   0x0010  /* One 
1d2c0 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
1d2d0 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
1d2e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1d2f0 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20  dxExpr   0x0020 
1d300 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1d310 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66  lving columns of
1d320 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
1d330 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53  .#define NC_VarS
1d340 65 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a  elect 0x0040  /*
1d350 20 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75   A correlated su
1d360 62 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20  bquery has been 
1d370 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1d380 4e 43 5f 55 45 4c 69 73 74 20 20 20 20 30 78 30  NC_UEList    0x0
1d390 30 38 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  080  /* True if 
1d3a0 75 4e 43 2e 70 45 4c 69 73 74 20 69 73 20 75 73  uNC.pEList is us
1d3b0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1d3c0 5f 55 41 67 67 49 6e 66 6f 20 20 30 78 30 31 30  _UAggInfo  0x010
1d3d0 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1d3e0 43 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 75 73  C.pAggInfo is us
1d3f0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1d400 5f 55 55 70 73 65 72 74 20 20 20 30 78 30 32 30  _UUpsert   0x020
1d410 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1d420 43 2e 70 55 70 73 65 72 74 20 69 73 20 75 73 65  C.pUpsert is use
1d430 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  d */.#define NC_
1d440 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
1d450 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
1d460 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
1d470 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
1d480 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70  .#define NC_Comp
1d490 6c 65 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a  lex   0x2000  /*
1d4a0 20 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74   True if a funct
1d4b0 69 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20  ion or subquery 
1d4c0 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1d4d0 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30 78 34  NC_AllowWin  0x4
1d4e0 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66  000  /* Window f
1d4f0 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c  unctions are all
1d500 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 0a 2f 2a  owed here */../*
1d510 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1d520 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1d530 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
1d540 73 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f  s a single ON CO
1d550 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65  NFLICT.** clause
1d560 20 69 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a   in an upsert..*
1d570 2a 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74  *.** The pUpsert
1d580 54 61 72 67 65 74 20 66 69 65 6c 64 20 69 73 20  Target field is 
1d590 6f 6e 6c 79 20 73 65 74 20 69 66 20 74 68 65 20  only set if the 
1d5a0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1d5b0 73 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63  se includes.** c
1d5c0 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63  onflict-target c
1d5d0 6c 61 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20  lause.  (In "ON 
1d5e0 43 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22 20 74  CONFLICT(a,b)" t
1d5f0 68 65 20 22 28 61 2c 62 29 22 20 69 73 20 74 68  he "(a,b)" is th
1d600 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61  e.** conflict-ta
1d610 72 67 65 74 20 63 6c 61 75 73 65 2e 29 20 20 54  rget clause.)  T
1d620 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74  he pUpsertTarget
1d630 57 68 65 72 65 20 69 73 20 74 68 65 20 6f 70 74  Where is the opt
1d640 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63  ional.** WHERE c
1d650 6c 61 75 73 65 20 75 73 65 64 20 74 6f 20 69 64  lause used to id
1d660 65 6e 74 69 66 79 20 70 61 72 74 69 61 6c 20 75  entify partial u
1d670 6e 69 71 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a  nique indexes..*
1d680 2a 0a 2a 2a 20 70 55 70 73 65 72 74 53 65 74 20  *.** pUpsertSet 
1d690 69 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63  is the list of c
1d6a0 6f 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73  olumn=expr terms
1d6b0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
1d6c0 74 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68  tatement. .** Th
1d6d0 65 20 70 55 70 73 65 72 74 53 65 74 20 66 69 65  e pUpsertSet fie
1d6e0 6c 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61  ld is NULL for a
1d6f0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20   ON CONFLICT DO 
1d700 4e 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a  NOTHING.  The.**
1d710 20 70 55 70 73 65 72 74 57 68 65 72 65 20 69 73   pUpsertWhere is
1d720 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
1d730 65 20 66 6f 72 20 74 68 65 20 55 50 44 41 54 45  e for the UPDATE
1d740 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66 20   and is NULL if 
1d750 74 68 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61  the.** WHERE cla
1d760 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a  use is omitted..
1d770 2a 2f 0a 73 74 72 75 63 74 20 55 70 73 65 72 74  */.struct Upsert
1d780 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
1d790 55 70 73 65 72 74 54 61 72 67 65 74 3b 20 20 2f  UpsertTarget;  /
1d7a0 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63 72  * Optional descr
1d7b0 69 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69  iption of confli
1d7c0 63 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  cting index */. 
1d7d0 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 54 61   Expr *pUpsertTa
1d7e0 72 67 65 74 57 68 65 72 65 3b 20 2f 2a 20 57 48  rgetWhere; /* WH
1d7f0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70  ERE clause for p
1d800 61 72 74 69 61 6c 20 69 6e 64 65 78 20 74 61 72  artial index tar
1d810 67 65 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  gets */.  ExprLi
1d820 73 74 20 2a 70 55 70 73 65 72 74 53 65 74 3b 20  st *pUpsertSet; 
1d830 20 20 20 20 2f 2a 20 54 68 65 20 53 45 54 20 63      /* The SET c
1d840 6c 61 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f 4e  lause from an ON
1d850 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45   CONFLICT UPDATE
1d860 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73   */.  Expr *pUps
1d870 65 72 74 57 68 65 72 65 3b 20 20 20 20 20 20 20  ertWhere;       
1d880 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
1d890 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  for the ON CONFL
1d8a0 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20  ICT UPDATE */.  
1d8b0 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 61 62  /* The fields ab
1d8c0 6f 76 65 20 63 6f 6d 70 72 69 73 65 20 74 68 65  ove comprise the
1d8d0 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20   parse tree for 
1d8e0 74 68 65 20 75 70 73 65 72 74 20 63 6c 61 75 73  the upsert claus
1d8f0 65 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 65 6c  e..  ** The fiel
1d900 64 73 20 62 65 6c 6f 77 20 61 72 65 20 75 73 65  ds below are use
1d910 64 20 74 6f 20 74 72 61 6e 73 66 65 72 20 69 6e  d to transfer in
1d920 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74  formation from t
1d930 68 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20 70  he INSERT.  ** p
1d940 72 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e 20 69  rocessing down i
1d950 6e 74 6f 20 74 68 65 20 55 50 44 41 54 45 20 70  nto the UPDATE p
1d960 72 6f 63 65 73 73 69 6e 67 20 77 68 69 6c 65 20  rocessing while 
1d970 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 64 65 2e  generating code.
1d980 0a 20 20 2a 2a 20 55 70 73 65 72 74 20 6f 77 6e  .  ** Upsert own
1d990 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  s the memory all
1d9a0 6f 63 61 74 65 64 20 61 62 6f 76 65 2c 20 62 75  ocated above, bu
1d9b0 74 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72 79  t not the memory
1d9c0 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64   below. */.  Ind
1d9d0 65 78 20 2a 70 55 70 73 65 72 74 49 64 78 3b 20  ex *pUpsertIdx; 
1d9e0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74 72         /* Constr
1d9f0 61 69 6e 74 20 74 68 61 74 20 70 55 70 73 65 72  aint that pUpser
1da00 74 54 61 72 67 65 74 20 69 64 65 6e 74 69 66 69  tTarget identifi
1da10 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  es */.  SrcList 
1da20 2a 70 55 70 73 65 72 74 53 72 63 3b 20 20 20 20  *pUpsertSrc;    
1da30 20 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62 65    /* Table to be
1da40 20 75 70 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e   updated */.  in
1da50 74 20 72 65 67 44 61 74 61 3b 20 20 20 20 20 20  t regData;      
1da60 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
1da70 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1da80 67 20 61 72 72 61 79 20 6f 66 20 56 41 4c 55 45  g array of VALUE
1da90 53 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74 61  S */.  int iData
1daa0 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
1dab0 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1dac0 20 64 61 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a   data cursor */.
1dad0 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20    int iIdxCur;  
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1daf0 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73  ndex of the firs
1db00 74 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a  t index cursor *
1db10 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
1db20 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1db30 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1db40 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  re contains all 
1db50 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e  information.** n
1db60 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
1db70 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e  e code for a sin
1db80 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  gle SELECT state
1db90 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ment..**.** See 
1dba0 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
1dbb0 6e 74 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75 74  nt on the comput
1dbc0 65 4c 69 6d 69 74 52 65 67 69 73 74 65 72 73 28  eLimitRegisters(
1dbd0 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 61 0a  ) routine for a.
1dbe0 2a 2a 20 64 65 74 61 69 6c 65 64 20 64 65 73 63  ** detailed desc
1dbf0 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  ription of the m
1dc00 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 69 4c  eaning of the iL
1dc10 69 6d 69 74 20 61 6e 64 20 69 4f 66 66 73 65 74  imit and iOffset
1dc20 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61   fields..**.** a
1dc30 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e  ddrOpenEphm[] en
1dc40 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68  tries contain th
1dc50 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  e address of OP_
1dc60 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1dc70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20  codes..** These 
1dc80 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62  addresses must b
1dc90 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74  e stored so that
1dca0 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20   we can go back 
1dcb0 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74  and fill in.** t
1dcc0 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e  he P4_KEYINFO an
1dcd0 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20  d P2 parameters 
1dce0 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20  later.  Neither 
1dcf0 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a  the KeyInfo nor.
1dd00 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
1dd10 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63   columns in P2 c
1dd20 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61  an be computed a
1dd30 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a  t the same time.
1dd40 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65  ** as the OP_Ope
1dd50 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f  nEphm instructio
1dd60 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75  n is coded becau
1dd70 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68  se not.** enough
1dd80 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
1dd90 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  ut the compound 
1dda0 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
1ddb0 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a  t that point..**
1ddc0 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
1ddd0 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d   addrOpenTran[0]
1dde0 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e   and [1] contain
1ddf0 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
1de00 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65  ences.** for the
1de10 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68   result set.  Th
1de20 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
1de30 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f  drOpenEphm[2] co
1de40 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1de50 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f  .** sequences fo
1de60 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
1de70 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
1de80 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72   Select {.  Expr
1de90 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
1dea0 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73     /* The fields
1deb0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a   of the result *
1dec0 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
1ded0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1dee0 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54  e of: TK_UNION T
1def0 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45  K_ALL TK_INTERSE
1df00 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a  CT TK_EXCEPT */.
1df10 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74    LogEst nSelect
1df20 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
1df30 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
1df40 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20  result rows */. 
1df50 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20   u32 selFlags;  
1df60 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
1df70 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a  us SF_* values *
1df80 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20  /.  int iLimit, 
1df90 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65  iOffset;   /* Me
1dfa0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68  mory registers h
1dfb0 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f  olding LIMIT & O
1dfc0 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a  FFSET counters *
1dfd0 2f 0a 20 20 75 33 32 20 73 65 6c 49 64 3b 20 20  /.  u32 selId;  
1dfe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 6e             /* Un
1dff0 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 20  ique identifier 
1e000 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20  number for this 
1e010 53 45 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74 20  SELECT */.  int 
1e020 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
1e030 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
1e040 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
1e050 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1e060 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  t */.  SrcList *
1e070 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
1e080 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
1e090 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1e0a0 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
1e0b0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1e0c0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1e0d0 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
1e0e0 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
1e0f0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
1e100 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
1e110 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
1e120 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
1e130 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
1e140 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
1e150 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
1e160 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
1e170 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
1e180 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
1e190 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
1e1a0 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
1e1b0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1e1c0 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
1e1d0 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
1e1e0 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70  ompound */.  Exp
1e1f0 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
1e200 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
1e210 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1e220 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1e230 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1e240 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54            /* WIT
1e250 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65  H clause attache
1e260 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1e270 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23 69  . Or NULL. */.#i
1e280 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1e290 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 57  T_WINDOWFUNC.  W
1e2a0 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20  indow *pWin;    
1e2b0 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1e2c0 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
1e2d0 73 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70  s */.  Window *p
1e2e0 57 69 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f 2a  WinDefn;      /*
1e2f0 20 4c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 77   List of named w
1e300 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e  indow definition
1e310 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  s */.#endif.};..
1e320 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1e330 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
1e340 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
1e350 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
1e360 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
1e370 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61   Flag"..**.** Va
1e380 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1e390 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61  (all checked via
1e3a0 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20   assert()).**   
1e3b0 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20    SF_HasAgg     
1e3c0 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20  == NC_HasAgg.** 
1e3d0 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67      SF_MinMaxAgg
1e3e0 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67    == NC_MinMaxAg
1e3f0 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  g     == SQLITE_
1e400 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20  FUNC_MINMAX.**  
1e410 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74     SF_FixedLimit
1e420 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49   == WHERE_USE_LI
1e430 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT.*/.#define S
1e440 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
1e450 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74   0x00001  /* Out
1e460 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
1e470 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
1e480 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20  e SF_All        
1e490 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20      0x00002  /* 
1e4a0 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c  Includes the ALL
1e4b0 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1e4c0 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
1e4d0 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f        0x00004  /
1e4e0 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61  * Identifiers ha
1e4f0 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
1e500 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1e510 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78  ggregate      0x
1e520 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69  00008  /* Contai
1e530 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73  ns agg functions
1e540 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a   or a GROUP BY *
1e550 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1e560 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30  Agg         0x00
1e570 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  010  /* Contains
1e580 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1e590 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
1e5a0 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
1e5b0 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73    0x00020  /* Us
1e5c0 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
1e5d0 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
1e5e0 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
1e5f0 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30  ed       0x00040
1e600 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
1e610 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
1e620 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
1e630 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
1e640 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20  nfo    0x00080  
1e650 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
1e660 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
1e670 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
1e680 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
1e690 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20      0x00100  /* 
1e6a0 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
1e6b0 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66  nd query */.#def
1e6c0 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
1e6d0 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f        0x00200  /
1e6e0 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
1e6f0 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
1e700 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1e710 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78  ultiValue     0x
1e720 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65  00400  /* Single
1e730 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74   VALUES term wit
1e740 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1e750 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
1e760 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30  stedFrom     0x0
1e770 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0800  /* Part of
1e780 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
1e790 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1e7a0 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61  #define SF_MinMa
1e7b0 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30  xAgg      0x0100
1e7c0 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  0  /* Aggregate 
1e7d0 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29  containing min()
1e7e0 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65   or max() */.#de
1e7f0 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76  fine SF_Recursiv
1e800 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20  e      0x02000  
1e810 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65  /* The recursive
1e820 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72   part of a recur
1e830 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66  sive CTE */.#def
1e840 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69  ine SF_FixedLimi
1e850 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f  t     0x04000  /
1e860 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74  * nSelectRow set
1e870 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c   by a constant L
1e880 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT */.#define 
1e890 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
1e8a0 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65    0x08000  /* Ne
1e8b0 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
1e8c0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1e8d0 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1e8e0 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20  SF_Converted    
1e8f0 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79    0x10000  /* By
1e900 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1e910 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1e920 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1e930 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20  _IncludeHidden  
1e940 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c  0x20000  /* Incl
1e950 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ude hidden colum
1e960 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a  ns in output */.
1e970 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c  #define SF_Compl
1e980 65 78 52 65 73 75 6c 74 20 20 30 78 34 30 30 30  exResult  0x4000
1e990 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e  0  /* Result con
1e9a0 74 61 69 6e 73 20 73 75 62 71 75 65 72 79 20 6f  tains subquery o
1e9b0 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f  r function */../
1e9c0 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73  *.** The results
1e9d0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e   of a SELECT can
1e9e0 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20   be distributed 
1e9f0 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
1ea00 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62   as defined.** b
1ea10 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1ea20 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20  lowing macros.  
1ea30 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78  The "SRT" prefix
1ea40 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52   means "SELECT R
1ea50 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a  esult.** Type"..
1ea60 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e  **.**     SRT_Un
1ea70 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20  ion       Store 
1ea80 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79  results as a key
1ea90 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1eaa0 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20  index.**        
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65               ide
1eac0 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74  ntified by pDest
1ead0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
1eae0 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20       SRT_Except 
1eaf0 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75       Remove resu
1eb00 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d  lts from the tem
1eb10 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65  porary index pDe
1eb20 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1eb30 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74  **     SRT_Exist
1eb40 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31  s      Store a 1
1eb50 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
1eb60 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69  pDest->iSDParm i
1eb70 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  f the result.** 
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65      set is not e
1eba0 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mpty..**.**     
1ebb0 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
1ebc0 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74  Throw the result
1ebd0 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73  s away.  This is
1ebe0 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a   used by SELECT.
1ebf0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ec00 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
1ec10 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
1ec20 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72  s whose only pur
1ec30 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20  pose is.**      
1ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ec50 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20  he side-effects 
1ec60 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  of functions..**
1ec70 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61  .** All of the a
1ec80 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f  bove are free to
1ec90 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52   ignore their OR
1eca0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54  DER BY clause. T
1ecb0 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c  hose that.** fol
1ecc0 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74  low must honor t
1ecd0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1ece0 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1ecf0 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65  T_Output      Ge
1ed00 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20  nerate a row of 
1ed10 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68  output (using th
1ed20 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a  e OP_ResultRow.*
1ed30 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ed40 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f        opcode) fo
1ed50 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  r each row in th
1ed60 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a  e result set..**
1ed70 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20  .**     SRT_Mem 
1ed80 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c          Only val
1ed90 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  id if the result
1eda0 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   is a single col
1edb0 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  umn..**         
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72              Stor
1edd0 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75  e the first colu
1ede0 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  mn of the first 
1edf0 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20  result row.**   
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee10 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44    in register pD
1ee20 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65  est->iSDParm the
1ee30 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65  n abandon the re
1ee40 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  st.**           
1ee50 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1ee60 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65   query.  This de
1ee70 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65  stination implie
1ee80 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a  s "LIMIT 1"..**.
1ee90 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20  **     SRT_Set  
1eea0 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c         The resul
1eeb0 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67  t must be a sing
1eec0 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72  le column.  Stor
1eed0 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20  e each.**       
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1eef0 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74  w of result as t
1ef00 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20  he key in table 
1ef10 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1ef20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ef30 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65         Apply the
1ef40 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d   affinity pDest-
1ef50 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20  >affSdst before 
1ef60 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20  storing.**      
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ef80 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f  esults.  Used to
1ef90 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28   implement "IN (
1efa0 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a  SELECT ...)"..**
1efb0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65  .**     SRT_Ephe
1efc0 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61  mTab    Create a
1efd0 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1efe0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1eff0 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20   and store.**   
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f010 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65    the result the
1f020 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69  re. The cursor i
1f030 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65  s left open afte
1f040 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  r.**            
1f050 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69           returni
1f060 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b  ng.  This is lik
1f070 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65  e SRT_Table exce
1f080 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20  pt that.**      
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f0a0 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1f0b0 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  uses OP_OpenEphe
1f0c0 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a  meral to create.
1f0d0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f0e0 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65         the table
1f0f0 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20   first..**.**   
1f100 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20    SRT_Coroutine 
1f110 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d    Generate a co-
1f120 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74  routine that ret
1f130 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f  urns a new row o
1f140 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
1f150 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
1f160 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73   each time it is
1f170 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65   invoked.  The e
1f180 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20  ntry point.**   
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1a0 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74    of the co-rout
1f1b0 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ine is stored in
1f1c0 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1f1d0 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20  >iSDParm.**     
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1f0 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72  and the result r
1f200 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ow is stored in 
1f210 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67  pDest->nDest reg
1f220 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20  isters.**       
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1f240 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73  arting with pDes
1f250 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20  t->iSdst..**.** 
1f260 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20      SRT_Table   
1f270 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1f280 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  s in temporary t
1f290 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1f2a0 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f  arm..**     SRT_
1f2b0 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73  Fifo        This
1f2c0 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68   is like SRT_Eph
1f2d0 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61  emTab except tha
1f2e0 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20  t the table.**  
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f300 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f     is assumed to
1f310 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e   already be open
1f320 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a  .  SRT_Fifo has.
1f330 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f340 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74         the addit
1f350 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f  ional property o
1f360 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20  f being able to 
1f370 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20  ignore.**       
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1f390 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1f3a0 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1f3b0 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f  _DistFifo    Sto
1f3c0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20  re results in a 
1f3d0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1f3e0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1f3f0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f400 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20         But also 
1f410 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  use temporary ta
1f420 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1f430 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20  rm+1 as.**      
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1f450 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70   record of all p
1f460 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64  rior results and
1f470 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c   ignore any dupl
1f480 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  icate.**        
1f490 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1f4a0 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20  s.  Name means: 
1f4b0 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22   "Distinct Fifo"
1f4c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1f4d0 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72  Queue       Stor
1f4e0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
1f4f0 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
1f500 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c  t->iSDParm (real
1f510 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ly.**           
1f520 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64            an ind
1f530 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73  ex).  Append a s
1f540 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73  equence number s
1f550 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69  o that all entri
1f560 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  es.**           
1f570 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69            are di
1f580 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  stinct..**.**   
1f590 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20    SRT_DistQueue 
1f5a0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1f5b0 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1f5c0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1f5d0 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20   only if.**     
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5f0 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20  the same record 
1f600 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73  has never been s
1f610 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54  tored before.  T
1f620 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  he.**           
1f630 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20            index 
1f640 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  at pDest->iSDPar
1f650 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69  m+1 hold all pri
1f660 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64  or stores..*/.#d
1f670 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20  efine SRT_Union 
1f680 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f         1  /* Sto
1f690 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79  re result as key
1f6a0 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
1f6b0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63  .#define SRT_Exc
1f6c0 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20  ept       2  /* 
1f6d0 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72  Remove result fr
1f6e0 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78  om a UNION index
1f6f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f700 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20  Exists       3  
1f710 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68  /* Store 1 if th
1f720 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20  e result is not 
1f730 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
1f740 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
1f750 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73    4  /* Do not s
1f760 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ave the results 
1f770 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66  anywhere */.#def
1f780 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20  ine SRT_Fifo    
1f790 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65       5  /* Store
1f7a0 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1f7b0 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1f7c0 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  c rowid */.#defi
1f7d0 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20  ne SRT_DistFifo 
1f7e0 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53      6  /* Like S
1f7f0 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69  RT_Fifo, but uni
1f800 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1f810 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f820 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20  Queue        7  
1f830 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1f840 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23  in an queue */.#
1f850 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51  define SRT_DistQ
1f860 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69  ueue    8  /* Li
1f870 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75  ke SRT_Queue, bu
1f880 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1f890 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65   only */../* The
1f8a0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1f8b0 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
1f8c0 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
1f8d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
1f8e0 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
1f8f0 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
1f900 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65  _DistQueue)..#de
1f910 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20  fine SRT_Output 
1f920 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70        9  /* Outp
1f930 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72  ut each row of r
1f940 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
1f950 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
1f960 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   10  /* Store re
1f970 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79  sult in a memory
1f980 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65   cell */.#define
1f990 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
1f9a0 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   11  /* Store re
1f9b0 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e  sults as keys in
1f9c0 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1f9d0 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61  fine SRT_EphemTa
1f9e0 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61  b    12  /* Crea
1f9f0 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62  te transient tab
1fa00 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20   and store like 
1fa10 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65  SRT_Table */.#de
1fa20 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69  fine SRT_Corouti
1fa30 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65  ne   13  /* Gene
1fa40 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f  rate a single ro
1fa50 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1fa60 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
1fa70 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74         14  /* St
1fa80 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1fa90 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1faa0 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f  atic rowid */../
1fab0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1fac0 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
1fad0 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20  describes where 
1fae0 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65  to put of the re
1faf0 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45  sults of.** a SE
1fb00 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1fb10 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
1fb20 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73  Dest {.  u8 eDes
1fb30 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
1fb40 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20   How to dispose 
1fb50 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20  of the results. 
1fb60 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f   On of SRT_* abo
1fb70 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44  ve. */.  int iSD
1fb80 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  Parm;         /*
1fb90 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
1fba0 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
1fbb0 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
1fbc0 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20  /.  int iSdst;  
1fbd0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65           /* Base
1fbe0 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20   register where 
1fbf0 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74  results are writ
1fc00 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64  ten */.  int nSd
1fc10 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
1fc20 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
1fc30 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  ters allocated *
1fc40 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53 64  /.  char *zAffSd
1fc50 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69  st;      /* Affi
1fc60 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
1fc70 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
1fc80 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1fc90 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63  derBy;  /* Key c
1fca0 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51  olumns for SRT_Q
1fcb0 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73  ueue and SRT_Dis
1fcc0 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  tQueue */.};../*
1fcd0 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20  .** During code 
1fce0 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74  generation of st
1fcf0 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  atements that do
1fd00 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55   inserts into AU
1fd10 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74  TOINCREMENT.** t
1fd20 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f  ables, the follo
1fd30 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  wing information
1fd40 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
1fd50 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f  the Table.u.auto
1fd60 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72  Inc.p.** pointer
1fd70 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63   of each autoinc
1fd80 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20  rement table to 
1fd90 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65  record some side
1fda0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
1fdb0 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65  t.** the code ge
1fdc0 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20  nerator needs.  
1fdd0 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20  We have to keep 
1fde0 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e  per-table autoin
1fdf0 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72  crement.** infor
1fe00 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69  mation in case i
1fe10 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20  nserts are done 
1fe20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
1fe30 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f    Triggers do no
1fe40 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f  t.** normally co
1fe50 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61  ordinate their a
1fe60 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77  ctivities, but w
1fe70 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f  e do need to coo
1fe80 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c  rdinate the.** l
1fe90 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e  oading and savin
1fea0 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65  g of autoincreme
1feb0 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  nt information..
1fec0 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e  */.struct Autoin
1fed0 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e  cInfo {.  Autoin
1fee0 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20  cInfo *pNext;   
1fef0 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f  /* Next info blo
1ff00 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20  ck in a list of 
1ff10 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61  them all */.  Ta
1ff20 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
1ff30 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69      /* Table thi
1ff40 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66  s info block ref
1ff50 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20  ers to */.  int 
1ff60 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1ff70 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71    /* Index in sq
1ff80 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64  lite3.aDb[] of d
1ff90 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
1ffa0 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65  pTab */.  int re
1ffb0 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20  gCtr;           
1ffc0 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1ffd0 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72  er holding the r
1ffe0 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  owid counter */.
1fff0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  };../*.** At lea
20000 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
20010 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
20020 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
20030 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a  eated for each.*
20040 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d  * trigger that m
20050 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c  ay be fired whil
20060 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53  e parsing an INS
20070 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
20080 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65  ELETE.** stateme
20090 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a  nt. All such obj
200a0 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ects are stored 
200b0 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  in the linked li
200c0 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20  st headed at.** 
200d0 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
200e0 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e  g and deleted on
200f0 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  ce statement com
20100 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65  pilation has bee
20110 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a  n.** completed..
20120 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62  **.** A Vdbe sub
20130 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d  -program that im
20140 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64  plements the bod
20150 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73  y and WHEN claus
20160 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20  e of trigger.** 
20170 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67  TriggerPrg.pTrig
20180 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20  ger, assuming a 
20190 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  default ON CONFL
201a0 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a  ICT clause of.**
201b0 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f   TriggerPrg.orco
201c0 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  nf, is stored in
201d0 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
201e0 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c  pProgram variabl
201f0 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e  e..** The Parse.
20200 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
20210 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20   never contains 
20220 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68  two entries with
20230 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c   the same.** val
20240 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72  ues for both pTr
20250 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66  igger and orconf
20260 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67  ..**.** The Trig
20270 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
20280 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  0] variable is s
20290 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20  et to a mask of 
202a0 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  old.* columns.**
202b0 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65   accessed (or se
202c0 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67  t to 0 for trigg
202d0 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72  ers fired as a r
202e0 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a  esult of INSERT.
202f0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
20300 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
20310 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
20320 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
20330 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
20340 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
20350 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
20360 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
20370 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
20380 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
20390 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
203a0 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
203b0 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
203c0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
203d0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
203e0 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50   Next entry in P
203f0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
20400 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72   list */.  SubPr
20410 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
20420 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
20430 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
20440 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
20450 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
20460 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
20470 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
20480 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
20490 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
204a0 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
204b0 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
204c0 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
204d0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
204e0 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
204f0 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
20500 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
20510 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
20520 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
20530 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
20540 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
20550 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
20560 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
20570 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
20580 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
20590 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
205a0 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
205b0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
205c0 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
205d0 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
205e0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
205f0 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
20600 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
20610 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
20620 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
20630 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
20640 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
20650 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
20660 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
20670 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
20680 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
20690 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
206a0 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
206b0 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
206c0 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
206d0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
206e0 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
206f0 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
20700 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
20710 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
20720 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
20730 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
20740 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
20750 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
20760 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
20770 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
20780 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
20790 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
207a0 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
207b0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
207c0 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
207d0 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
207e0 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
207f0 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
20800 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
20810 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
20820 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
20830 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
20840 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
20850 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
20860 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
20870 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
20880 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
20890 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
208a0 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
208b0 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
208c0 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
208d0 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
208e0 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
208f0 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
20900 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
20910 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
20920 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
20930 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
20940 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
20950 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
20960 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
20970 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
20980 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
20990 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72  -cache.** featur
209a0 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
209b0 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
209c0 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
209d0 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
209e0 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
209f0 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
20a00 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
20a10 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
20a20 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
20a30 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
20a40 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
20a50 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
20a60 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
20a70 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
20a80 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
20a90 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
20aa0 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
20ab0 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
20ac0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
20ad0 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
20ae0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
20af0 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
20b00 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
20b10 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
20b20 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
20b30 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
20b40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
20b50 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
20b60 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
20b70 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
20b80 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
20b90 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
20ba0 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
20bb0 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
20bc0 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
20bd0 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
20be0 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
20bf0 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
20c00 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
20c10 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
20c20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
20c30 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
20c40 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
20c50 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
20c60 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
20c70 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
20c80 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
20c90 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
20ca0 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
20cb0 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
20cc0 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
20cd0 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
20ce0 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
20cf0 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
20d00 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
20d10 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
20d20 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
20d30 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
20d40 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
20d50 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
20d60 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
20d70 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
20d80 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
20d90 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
20da0 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
20db0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
20dc0 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f  .  u8 disableLoo
20dd0 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65  kaside; /* Numbe
20de0 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61  r of times looka
20df0 73 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69  side has been di
20e00 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 64  sabled */.  u8 d
20e10 69 73 61 62 6c 65 56 74 61 62 3b 20 20 20 20 20  isableVtab;     
20e20 20 2f 2a 20 44 69 73 61 62 6c 65 20 61 6c 6c 20   /* Disable all 
20e30 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 66  virtual tables f
20e40 6f 72 20 74 68 69 73 20 70 61 72 73 65 20 2a 2f  or this parse */
20e50 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67  .  int nRangeReg
20e60 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20  ;       /* Size 
20e70 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
20e80 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
20e90 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52  */.  int iRangeR
20ea0 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72  eg;       /* Fir
20eb0 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74  st register in t
20ec0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
20ed0 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
20ee0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
20ef0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
20f00 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
20f10 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20  int nTab;       
20f20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20f30 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c  f previously all
20f40 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73  ocated VDBE curs
20f50 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ors */.  int nMe
20f60 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
20f70 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
20f80 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20  y cells used so 
20f90 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f  far */.  int szO
20fa0 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a  pAlloc;       /*
20fb0 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79   Bytes of memory
20fc0 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
20fd0 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
20fe0 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61  */.  int iSelfTa
20ff0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62  b;        /* Tab
21000 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  le associated wi
21010 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65  th an index on e
21020 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65  xpr, or negative
21030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21040 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68          ** of th
21050 65 20 62 61 73 65 20 72 65 67 69 73 74 65 72 20  e base register 
21060 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e  during check-con
21070 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a  straint eval */.
21080 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20    int nLabel;   
21090 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 2a 6e         /* The *n
210a0 65 67 61 74 69 76 65 2a 20 6f 66 20 74 68 65 20  egative* of the 
210b0 6e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73  number of labels
210c0 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e   used */.  int n
210d0 4c 61 62 65 6c 41 6c 6c 6f 63 3b 20 20 20 20 20  LabelAlloc;     
210e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f  /* Number of slo
210f0 74 73 20 69 6e 20 61 4c 61 62 65 6c 20 2a 2f 0a  ts in aLabel */.
21100 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20    int *aLabel;  
21110 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
21120 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65  to hold the labe
21130 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ls */.  ExprList
21140 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20   *pConstExpr;/* 
21150 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
21160 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  ions */.  Token 
21170 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f  constraintName;/
21180 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
21190 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74  nstraint current
211a0 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20  ly being parsed 
211b0 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69  */.  yDbMask wri
211c0 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61  teMask;   /* Sta
211d0 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  rt a write trans
211e0 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20  action on these 
211f0 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79  databases */.  y
21200 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73  DbMask cookieMas
21210 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f  k;  /* Bitmask o
21220 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65  f schema verifie
21230 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  d databases */. 
21240 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
21250 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
21260 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
21270 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
21280 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
21290 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
212a0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
212b0 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
212c0 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
212d0 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  ects */.  int nM
212e0 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f  axArg;         /
212f0 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65  * Max args passe
21300 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  d to user functi
21310 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61  on by sub-progra
21320 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65  m */.  int nSele
21330 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ct;         /* N
21340 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20  umber of SELECT 
21350 73 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72 20 66  stmts. Counter f
21360 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 49 64 20  or Select.selId 
21370 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
21380 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
21390 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65  CHE.  int nTable
213a0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20  Lock;        /* 
213b0 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20  Number of locks 
213c0 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f  in aTableLock */
213d0 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54  .  TableLock *aT
213e0 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71  ableLock; /* Req
213f0 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b  uired table lock
21400 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63  s for shared-cac
21410 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  he mode */.#endi
21420 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  f.  AutoincInfo 
21430 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f  *pAinc;  /* Info
21440 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55  rmation about AU
21450 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e  TOINCREMENT coun
21460 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20  ters */.  Parse 
21470 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f  *pToplevel;    /
21480 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  * Parse structur
21490 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72  e for main progr
214a0 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a  am (or NULL) */.
214b0 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65    Table *pTrigge
214c0 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20  rTab;  /* Table 
214d0 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69  triggers are bei
214e0 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a  ng coded for */.
214f0 20 20 50 61 72 73 65 20 2a 70 50 61 72 65 6e 74    Parse *pParent
21500 50 61 72 73 65 3b 20 2f 2a 20 50 61 72 65 6e 74  Parse; /* Parent
21510 20 70 61 72 73 65 72 20 69 66 20 74 68 69 73 20   parser if this 
21520 70 61 72 73 65 72 20 69 73 20 6e 65 73 74 65 64  parser is nested
21530 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72   */.  int addrCr
21540 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64  Tab;       /* Ad
21550 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61  dress of OP_Crea
21560 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20 6f  teBtree opcode o
21570 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  n CREATE TABLE *
21580 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
21590 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
215a0 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
215b0 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
215c0 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
215d0 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
215e0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
215f0 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
21600 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
21610 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
21620 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
21630 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
21640 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
21650 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
21660 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
21670 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
21680 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
21690 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
216a0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
216b0 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
216c0 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
216d0 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
216e0 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
216f0 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
21700 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
21710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21730 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21750 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46  *********.  ** F
21760 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74  ields above must
21770 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
21780 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69  to zero.  The fi
21790 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77  elds that follow
217a0 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74  ,.  ** down to t
217b0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
217c0 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73 65  the recursive se
217d0 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65  ction, do not ne
217e0 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e  ed to be.  ** in
217f0 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65  itialized as the
21800 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65  y will be set be
21810 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e  fore being used.
21820 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69    The boundary i
21830 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65  s.  ** determine
21840 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61  d by offsetof(Pa
21850 72 73 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a 20  rse,aTempReg).. 
21860 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
21870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
218a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
218b0 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b  int aTempReg[8];
218c0 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69          /* Holdi
218d0 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
218e0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
218f0 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
21900 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20  Token;       /* 
21910 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
21920 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
21930 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20  ject name */..  
21940 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
21950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21980 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41  *********.  ** A
21990 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74  bove is constant
219a0 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69   between recursi
219b0 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72  ons.  Below is r
219c0 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20  eset before and 
219d0 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20  after.  ** each 
219e0 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20  recursion.  The 
219f0 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e  boundary between
21a00 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f   these two regio
21a10 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ns is determined
21a20 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73  .  ** using offs
21a30 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74  etof(Parse,sLast
21a40 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c  Token) so the sL
21a50 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d  astToken field m
21a60 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20  ust be the.  ** 
21a70 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74  first field in t
21a80 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67  he recursive reg
21a90 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
21aa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ac0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ad0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
21ae0 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54  ..  Token sLastT
21af0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54  oken;       /* T
21b00 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61  he last token pa
21b10 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20  rsed */.  ynVar 
21b20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  nVar;           
21b30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21b40 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73   '?' variables s
21b50 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73  een in the SQL s
21b60 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50  o far */.  u8 iP
21b70 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  kSortOrder;     
21b80 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44       /* ASC or D
21b90 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20  ESC for INTEGER 
21ba0 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
21bb0 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20   u8 explain;    
21bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
21bd0 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49  ue if the EXPLAI
21be0 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20  N flag is found 
21bf0 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a  on the query */.
21c00 23 69 66 20 21 28 64 65 66 69 6e 65 64 28 53 51  #if !(defined(SQ
21c10 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
21c20 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e  LTABLE) && defin
21c30 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
21c40 4c 54 45 52 54 41 42 4c 45 29 29 0a 20 20 75 38  LTERTABLE)).  u8
21c50 20 65 50 61 72 73 65 4d 6f 64 65 3b 20 20 20 20   eParseMode;    
21c60 20 20 20 20 20 20 20 20 2f 2a 20 50 41 52 53 45          /* PARSE
21c70 5f 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74 61  _MODE_XXX consta
21c80 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
21c90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21ca0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
21cb0 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20  int nVtabLock;  
21cc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
21cd0 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
21ce0 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
21cf0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48  .#endif.  int nH
21d00 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
21d10 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
21d20 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
21d30 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
21d40 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
21d50 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
21d60 49 4e 0a 20 20 69 6e 74 20 61 64 64 72 45 78 70  IN.  int addrExp
21d70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lain;          /
21d80 2a 20 41 64 64 72 65 73 73 20 6f 66 20 63 75 72  * Address of cur
21d90 72 65 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e 20  rent OP_Explain 
21da0 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  opcode */.#endif
21db0 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74  .  VList *pVList
21dc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
21dd0 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20  Mapping between 
21de0 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61  variable names a
21df0 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20  nd numbers */.  
21e00 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
21e10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
21e20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
21e30 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
21e40 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74  re()) */.  const
21e50 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
21e60 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
21e70 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
21e80 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
21e90 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
21ea0 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
21eb0 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
21ec0 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
21ed0 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
21ee0 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 77  */.  Index *pNew
21ef0 49 6e 64 65 78 3b 20 20 20 20 20 20 20 20 20 2f  Index;         /
21f00 2a 20 41 6e 20 69 6e 64 65 78 20 62 65 69 6e 67  * An index being
21f10 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
21f20 43 52 45 41 54 45 20 49 4e 44 45 58 2e 0a 20 20  CREATE INDEX..  
21f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f40 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73            ** Als
21f50 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 72  o used to hold r
21f60 65 64 75 6e 64 61 6e 74 20 55 4e 49 51 55 45 20  edundant UNIQUE 
21f70 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20 20 20  constraints.    
21f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f90 20 20 20 20 20 20 20 20 2a 2a 20 64 75 72 69 6e          ** durin
21fa0 67 20 61 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d  g a RENAME COLUM
21fb0 4e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  N */.  Trigger *
21fc0 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20  pNewTrigger;    
21fd0 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65   /* Trigger unde
21fe0 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61  r construct by a
21ff0 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
22000 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
22010 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f  *zAuthContext; /
22020 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65  * The 6th parame
22030 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68  ter to db->xAuth
22040 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69   callbacks */.#i
22050 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
22060 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
22070 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20   Token sArg;    
22080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
22090 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61  mplete text of a
220a0 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74   module argument
220b0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70   */.  Table **ap
220c0 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
220d0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69  /* Pointer to vi
220e0 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65  rtual tables nee
220f0 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a  ding locking */.
22100 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a  #endif.  Table *
22110 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20  pZombieTab;     
22120 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61     /* List of Ta
22130 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64  ble objects to d
22140 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65  elete after code
22150 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65   gen */.  Trigge
22160 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72  rPrg *pTriggerPr
22170 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69  g;  /* Linked li
22180 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67  st of coded trig
22190 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a  gers */.  With *
221a0 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
221b0 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57      /* Current W
221c0 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e  ITH clause, or N
221d0 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ULL */.  With *p
221e0 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20  WithToFree;     
221f0 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20     /* Free this 
22200 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74  WITH object at t
22210 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61  he end of the pa
22220 72 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  rse */.#ifndef S
22230 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
22240 54 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65 54 6f  TABLE.  RenameTo
22250 6b 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20  ken *pRename;   
22260 20 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75 62 6a    /* Tokens subj
22270 65 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e 67 20  ect to renaming 
22280 62 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a  by ALTER TABLE *
22290 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64 65  /.#endif.};..#de
222a0 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f  fine PARSE_MODE_
222b0 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 30 0a  NORMAL        0.
222c0 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f  #define PARSE_MO
222d0 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  DE_DECLARE_VTAB 
222e0 20 31 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45   1.#define PARSE
222f0 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c  _MODE_RENAME_COL
22300 55 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20 50 41  UMN 2.#define PA
22310 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f  RSE_MODE_RENAME_
22320 54 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a 20  TABLE  3../*.** 
22330 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65  Sizes and pointe
22340 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61  rs of various pa
22350 72 74 73 20 6f 66 20 74 68 65 20 50 61 72 73 65  rts of the Parse
22360 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66   object..*/.#def
22370 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a  ine PARSE_HDR_SZ
22380 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
22390 61 54 65 6d 70 52 65 67 29 20 2f 2a 20 52 65 63  aTempReg) /* Rec
223a0 75 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20  ursive part w/o 
223b0 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66  aColCache*/.#def
223c0 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52 53  ine PARSE_RECURS
223d0 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61  E_SZ offsetof(Pa
223e0 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20  rse,sLastToken) 
223f0 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20     /* Recursive 
22400 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  part */.#define 
22410 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73  PARSE_TAIL_SZ (s
22420 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52  izeof(Parse)-PAR
22430 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f  SE_RECURSE_SZ) /
22440 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20  * Non-recursive 
22450 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  part */.#define 
22460 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28  PARSE_TAIL(X) ((
22470 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53  (char*)(X))+PARS
22480 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f  E_RECURSE_SZ)  /
22490 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69  * Pointer to tai
224a0 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  l */../*.** Retu
224b0 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65  rn true if curre
224c0 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73  ntly inside an s
224d0 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
224e0 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23  tab() call..*/.#
224f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
22500 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
22510 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
22520 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65  ARE_VTAB 0.#else
22530 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
22540 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72  CLARE_VTAB (pPar
22550 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3d 3d  se->eParseMode==
22560 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41  PARSE_MODE_DECLA
22570 52 45 5f 56 54 41 42 29 0a 23 65 6e 64 69 66 0a  RE_VTAB).#endif.
22580 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
22590 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
225a0 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49  BLE).  #define I
225b0 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20  N_RENAME_OBJECT 
225c0 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
225d0 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45  e IN_RENAME_OBJE
225e0 43 54 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72  CT (pParse->ePar
225f0 73 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f 4d 4f  seMode>=PARSE_MO
22600 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e  DE_RENAME_COLUMN
22610 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ).#endif..#if de
22620 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
22630 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20  T_VIRTUALTABLE) 
22640 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
22650 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
22660 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  E).  #define IN_
22670 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20 30 0a  SPECIAL_PARSE 0.
22680 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22690 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45  IN_SPECIAL_PARSE
226a0 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65   (pParse->eParse
226b0 4d 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f 44 45  Mode!=PARSE_MODE
226c0 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69 66 0a  _NORMAL).#endif.
226d0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
226e0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
226f0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61  ing structure ca
22700 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e  n be declared on
22710 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65   a stack and use
22720 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65  d.** to save the
22730 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
22740 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61  ext value so tha
22750 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
22760 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73  ored later..*/.s
22770 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
22780 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t {.  const char
22790 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
227a0 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50    /* Put saved P
227b0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
227c0 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73  t here */.  Pars
227d0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
227e0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
227f0 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  arse structure *
22800 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66  /.};../*.** Bitf
22810 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50  ield flags for P
22820 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f  5 value in vario
22830 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a  us opcodes..**.*
22840 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
22850 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
22860 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
22870 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48     OPFLAG_LENGTH
22880 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  ARG    == SQLITE
22890 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20  _FUNC_LENGTH.** 
228a0 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46     OPFLAG_TYPEOF
228b0 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  ARG    == SQLITE
228c0 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20  _FUNC_TYPEOF.** 
228d0 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53     OPFLAG_BULKCS
228e0 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  R      == BTREE_
228f0 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f  BULKLOAD.**    O
22900 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20  PFLAG_SEEKEQ    
22910 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b     == BTREE_SEEK
22920 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  _EQ.**    OPFLAG
22930 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d  _FORDELETE    ==
22940 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45   BTREE_FORDELETE
22950 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41  .**    OPFLAG_SA
22960 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54  VEPOSITION == BT
22970 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  REE_SAVEPOSITION
22980 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55  .**    OPFLAG_AU
22990 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54  XDELETE    == BT
229a0 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f  REE_AUXDELETE.*/
229b0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
229c0 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
229d0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65  01    /* OP_Inse
229e0 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74  rt: Set to updat
229f0 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f  e db->nChange */
22a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73        /* Also us
22a30 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35  ed in P2 (not P5
22a40 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a  ) of OP_Delete *
22a50 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22a60 5f 4e 4f 43 48 4e 47 20 20 20 20 20 20 20 20 30  _NOCHNG        0
22a70 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56 43 6f  x01    /* OP_VCo
22a80 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20 66 6f  lumn nochange fo
22a90 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
22aa0 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d  ine OPFLAG_EPHEM
22ab0 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20           0x01   
22ac0 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45   /* OP_Column: E
22ad0 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20  phemeral output 
22ae0 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  is ok */.#define
22af0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
22b00 44 20 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  D     0x20    /*
22b10 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
22b20 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a  b->lastRowid */.
22b30 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
22b40 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30  SUPDATE      0x0
22b50 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f  4    /* This OP_
22b60 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c  Insert is an sql
22b70 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
22b80 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  ne OPFLAG_APPEND
22b90 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20          0x08    
22ba0 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c  /* This is likel
22bb0 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
22bc0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
22bd0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
22be0 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79  T 0x10    /* Try
22bf0 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b   to avoid a seek
22c00 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28   in BtreeInsert(
22c10 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
22c20 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20  LAG_ISNOOP      
22c30 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
22c40 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d  Delete does pre-
22c50 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79  update-hook only
22c60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22c70 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
22c80 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x40    /* OP_C
22c90 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
22ca0 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a  for length() */.
22cb0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54  #define OPFLAG_T
22cc0 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38  YPEOFARG     0x8
22cd0 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
22ce0 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
22cf0 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66  typeof() */.#def
22d00 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  ine OPFLAG_BULKC
22d10 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20  SR       0x01   
22d20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73   /* OP_Open** us
22d30 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20  ed to open bulk 
22d40 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  cursor */.#defin
22d50 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  e OPFLAG_SEEKEQ 
22d60 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
22d70 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73  * OP_Open** curs
22d80 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20  or uses EQ seek 
22d90 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
22da0 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
22db0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
22dc0 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75  OP_Open should u
22dd0 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45  se BTREE_FORDELE
22de0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
22df0 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20  FLAG_P2ISREG    
22e00 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32     0x10    /* P2
22e10 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73   to OP_Open** is
22e20 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62   a register numb
22e30 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  er */.#define OP
22e40 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20  FLAG_PERMUTE    
22e50 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
22e60 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68  _Compare: use th
22e70 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f  e permutation */
22e80 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22e90 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78  SAVEPOSITION  0x
22ea0 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  02    /* OP_Dele
22eb0 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20  te/Insert: save 
22ec0 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64  cursor pos */.#d
22ed0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58  efine OPFLAG_AUX
22ee0 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20  DELETE     0x04 
22ef0 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a     /* OP_Delete:
22f00 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45   index in a DELE
22f10 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65  TE op */.#define
22f20 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d   OPFLAG_NOCHNG_M
22f30 41 47 49 43 20 20 30 78 36 64 20 20 20 20 2f 2a  AGIC  0x6d    /*
22f40 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
22f50 73 65 72 69 61 6c 74 79 70 65 20 31 30 20 69 73  serialtype 10 is
22f60 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61   ok */../*. * Ea
22f70 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
22f80 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
22f90 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
22fa0 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
22fb0 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
22fc0 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50  Trigger.. *. * P
22fd0 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61  ointers to insta
22fe0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
22ff0 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65  rigger are store
23000 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20  d in two ways.. 
23010 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69  * 1. In the "tri
23020 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c  gHash" hash tabl
23030 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73  e (part of the s
23040 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70  qlite3* that rep
23050 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20  resents the. *  
23060 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
23070 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
23080 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
23090 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
230a0 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
230b0 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
230c0 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
230d0 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
230e0 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
230f0 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
23100 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
23110 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
23120 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
23130 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
23140 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
23150 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
23160 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
23170 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
23180 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
23190 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
231a0 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
231b0 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
231c0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
231d0 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
231e0 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
231f0 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
23200 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
23210 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
23220 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
23230 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
23240 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
23250 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
23260 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
23270 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
23280 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
23290 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
232a0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
232b0 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
232c0 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
232d0 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
232e0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
232f0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
23300 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
23310 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
23320 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
23330 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
23340 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
23350 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
23360 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
23370 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
23380 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
23390 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
233a0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
233b0 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
233c0 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
233d0 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
233e0 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
233f0 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
23400 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
23410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23420 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
23430 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
23440 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
23450 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
23460 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
23470 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
23480 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
23490 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
234a0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
234b0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
234c0 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
234d0 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
234e0 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
234f0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
23500 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
23510 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
23520 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
23530 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
23540 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
23550 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
23560 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
23570 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
23580 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
23590 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
235a0 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
235b0 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
235c0 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  hich..**.** If t
235d0 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
235e0 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
235f0 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
23600 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
23610 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
23620 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
23630 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
23640 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
23650 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
23660 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
23670 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
23680 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
23690 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
236a0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
236b0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
236c0 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
236d0 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
236e0 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
236f0 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
23700 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73  . *. * Instances
23710 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
23720 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65  erStep are store
23730 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69  d in a singly li
23740 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65  nked list (linke
23750 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22  d. * using the "
23760 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72  pNext" member) r
23770 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
23780 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
23790 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73  ber of the. * as
237a0 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20  sociated struct 
237b0 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65  Trigger instance
237c0 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
237d0 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65  ent of the linke
237e0 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65  d list is. * the
237f0 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74   first step of t
23800 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72  he trigger-progr
23810 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f  am.. *. * The "o
23820 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61  p" member indica
23830 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73  tes whether this
23840 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20   is a "DELETE", 
23850 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54  "INSERT", "UPDAT
23860 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54  E" or. * "SELECT
23870 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65  " statement. The
23880 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65   meanings of the
23890 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69   other members i
238a0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
238b0 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  the. * value of 
238c0 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
238d0 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
238e0 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
238f0 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
23900 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
23910 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
23920 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
23930 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
23940 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
23950 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
23960 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
23970 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
23980 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
23990 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
239a0 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
239b0 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  .. * zTarget   -
239c0 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
239d0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
239e0 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
239f0 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
23a00 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
23a10 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
23a20 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
23a30 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
23a40 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
23a50 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
23a60 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
23a70 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
23a80 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
23a90 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
23aa0 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
23ab0 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
23ac0 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
23ad0 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
23ae0 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
23af0 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
23b00 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
23b10 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
23b20 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
23b30 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
23b40 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
23b50 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
23b60 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74  e table to delet
23b70 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72  e from.. * pWher
23b80 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
23b90 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
23ba0 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
23bb0 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
23bc0 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
23bd0 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
23be0 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  NULL.. *. * (op 
23bf0 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a  == TK_UPDATE). *
23c00 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
23c10 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
23c20 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
23c30 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  te.. * pWhere   
23c40 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
23c50 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
23c60 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
23c70 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
23c80 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
23c90 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
23ca0 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
23cb0 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
23cc0 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
23cd0 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
23ce0 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
23cf0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
23d00 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
23d10 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
23d20 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
23d30 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
23d40 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
23d50 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74  t.. *. */.struct
23d60 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20   TriggerStep {. 
23d70 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
23d80 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
23d90 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
23da0 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c  DATE, TK_INSERT,
23db0 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20   TK_SELECT */.  
23dc0 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  u8 orconf;      
23dd0 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62       /* OE_Rollb
23de0 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72  ack etc. */.  Tr
23df0 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20  igger *pTrig;   
23e00 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65     /* The trigge
23e10 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70  r that this step
23e20 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f   is a part of */
23e30 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
23e40 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43  ct;     /* SELEC
23e50 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52  T statement or R
23e60 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
23e70 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  O SELECT ... */.
23e80 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b    char *zTarget;
23e90 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
23ea0 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
23eb0 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
23ec0 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
23ed0 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
23ee0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
23ef0 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
23f00 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
23f10 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
23f20 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
23f30 73 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f  se for UPDATE */
23f40 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
23f50 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
23f60 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
23f70 52 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a  RT */.  Upsert *
23f80 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20  pUpsert;     /* 
23f90 55 70 73 65 72 74 20 63 6c 61 75 73 65 73 20 6f  Upsert clauses o
23fa0 6e 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20  n an INSERT */. 
23fb0 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
23fc0 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
23fd0 6c 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68  l SQL text of th
23fe0 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
23ff0 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
24000 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
24010 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
24020 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
24030 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
24040 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
24050 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
24060 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
24070 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
24080 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
24090 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
240a0 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
240b0 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
240c0 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
240d0 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
240e0 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
240f0 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
24100 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
24110 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
24120 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
24130 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
24140 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
24150 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
24160 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
24170 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
24180 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
24190 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
241a0 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
241b0 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
241c0 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62  chema */.  int b
241d0 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f  VarOnly;       /
241e0 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69  * Check for vari
241f0 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references 
24200 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  only */.  const 
24210 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
24220 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
24230 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
24240 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
24250 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
24260 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
24270 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
24280 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
24290 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
242a0 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
242b0 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
242c0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
242d0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
242e0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
242f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
24300 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
24310 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
24320 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
24330 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
24340 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
24350 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
24360 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
24370 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
24380 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72 20  uct sqlite3_str 
24390 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
243a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
243b0 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
243c0 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
243d0 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
243e0 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20  har *zText;     
243f0 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e      /* The strin
24400 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66  g collected so f
24410 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c  ar */.  u32  nAl
24420 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
24430 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20  Amount of space 
24440 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65  allocated in zTe
24450 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41  xt */.  u32  mxA
24460 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
24470 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20  Maximum allowed 
24480 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66  allocation.  0 f
24490 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61  or no malloc usa
244a0 67 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68  ge */.  u32  nCh
244b0 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ar;          /* 
244c0 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
244d0 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ring so far */. 
244e0 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20   u8   accError; 
244f0 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
24500 4e 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45 5f  NOMEM or SQLITE_
24510 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20  TOOBIG */.  u8  
24520 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20   printfFlags;   
24530 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54   /* SQLITE_PRINT
24540 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f  F flags below */
24550 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .};.#define SQLI
24560 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e  TE_PRINTF_INTERN
24570 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65  AL 0x01  /* Inte
24580 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f  rnal-use-only co
24590 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64  nverters allowed
245a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
245b0 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e  TE_PRINTF_SQLFUN
245c0 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20  C  0x02  /* SQL 
245d0 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
245e0 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a  ts to VXPrintf *
245f0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
24600 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
24610 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69   0x04  /* True i
24620 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63  f xText is alloc
24630 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23  ated space */..#
24640 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65  define isMalloce
24650 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69  d(X)  (((X)->pri
24660 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54  ntfFlags & SQLIT
24670 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
24680 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41  D)!=0).../*.** A
24690 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
246a0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
246b0 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
246c0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
246d0 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
246e0 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
246f0 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
24700 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
24710 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
24720 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
24730 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
24740 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
24750 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
24760 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
24770 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
24780 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
24790 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
247a0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
247b0 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
247c0 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
247d0 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
247e0 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24800 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
24810 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 33 32  ed here */.  u32
24820 20 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20 20 20   mInitFlags;    
24830 20 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72 6f   /* Flags contro
24840 6c 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73  lling error mess
24850 61 67 65 73 20 2a 2f 0a 20 20 75 33 32 20 6e 49  ages */.  u32 nI
24860 6e 69 74 52 6f 77 3b 20 20 20 20 20 20 20 2f 2a  nitRow;       /*
24870 20 4e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   Number of rows 
24880 70 72 6f 63 65 73 73 65 64 20 2a 2f 0a 7d 20 49  processed */.} I
24890 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
248a0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
248b0 6f 72 20 6d 49 6e 69 74 46 6c 61 67 73 0a 2a 2f  or mInitFlags.*/
248c0 0a 23 64 65 66 69 6e 65 20 49 4e 49 54 46 4c 41  .#define INITFLA
248d0 47 5f 41 6c 74 65 72 54 61 62 6c 65 20 20 20 30  G_AlterTable   0
248e0 78 30 30 30 31 20 20 2f 2a 20 54 68 69 73 20 69  x0001  /* This i
248f0 73 20 61 20 72 65 70 61 72 73 65 20 61 66 74 65  s a reparse afte
24900 72 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f  r ALTER TABLE */
24910 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72  ../*.** Structur
24920 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f  e containing glo
24930 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  bal configuratio
24940 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53  n data for the S
24950 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a  QLite library..*
24960 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
24970 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e  ure also contain
24980 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66  s some state inf
24990 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
249a0 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
249b0 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74  g {.  int bMemst
249c0 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  at;             
249d0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
249e0 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79  to enable memory
249f0 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74   status */.  int
24a00 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20   bCoreMutex;    
24a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24a20 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
24a30 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a   core mutexing *
24a40 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74  /.  int bFullMut
24a50 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
24a60 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
24a70 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74   enable full mut
24a80 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
24a90 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20  OpenUri;        
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24ab0 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65  True to interpre
24ac0 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55  t filenames as U
24ad0 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73  RIs */.  int bUs
24ae0 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20  eCis;           
24af0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
24b00 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63  e covering indic
24b10 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e  es for full-scan
24b20 73 20 2a 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c  s */.  int bSmal
24b30 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  lMalloc;        
24b40 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 6f 69           /* Avoi
24b50 64 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61  d large memory a
24b60 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20 74 72  llocations if tr
24b70 75 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74  ue */.  int mxSt
24b80 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  rlen;           
24b90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
24ba0 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67  imum string leng
24bb0 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65  th */.  int neve
24bc0 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20  rCorrupt;       
24bd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
24be0 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20  abase is always 
24bf0 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20  well-formed */. 
24c00 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65   int szLookaside
24c10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24c20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
24c30 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73  okaside buffer s
24c40 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f  ize */.  int nLo
24c50 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
24c60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
24c70 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
24c80 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a  buffer count */.
24c90 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c    int nStmtSpill
24ca0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24cb0 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72      /* Stmt-jour
24cc0 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73  nal spill-to-dis
24cd0 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20  k threshold */. 
24ce0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
24cf0 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
24d00 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
24d10 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
24d20 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
24d30 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
24d40 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
24d50 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
24d60 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
24d70 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
24d80 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
24d90 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
24da0 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
24db0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
24dc0 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
24dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24de0 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
24df0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
24e00 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
24e10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24e20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
24e30 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
24e40 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
24e50 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
24e60 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
24e70 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
24e80 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
24e90 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
24ea0 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
24eb0 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
24ec0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
24ed0 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
24ee0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
24ef0 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
24f00 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61  p */.  void *pPa
24f10 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
24f20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
24f30 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f   cache memory */
24f40 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20  .  int szPage;  
24f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f60 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
24f70 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61  each page in pPa
24f80 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50  ge[] */.  int nP
24f90 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24fb0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
24fc0 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
24fd0 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b  nt mxParserStack
24fe0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24ff0 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74   /* maximum dept
25000 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20  h of the parser 
25010 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73  stack */.  int s
25020 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65  haredCacheEnable
25030 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
25040 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63  true if shared-c
25050 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65  ache mode enable
25060 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61  d */.  u32 szPma
25070 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25080 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
25090 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73  mum Sorter PMA s
250a0 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  ize */.  /* The 
250b0 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
250c0 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
250d0 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
250e0 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
250f0 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
25100 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
25110 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
25120 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
25130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25140 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
25150 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
25160 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
25170 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
25180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25190 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
251a0 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
251b0 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
251c0 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
251d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
251e0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
251f0 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
25200 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
25210 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
25220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
25230 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
25240 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
25250 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
25260 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
25270 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
25280 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
25290 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
252a0 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65  int nRefInitMute
252b0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
252c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
252d0 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74  sers of pInitMut
252e0 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ex */.  sqlite3_
252f0 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
25300 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
25310 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
25320 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
25330 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
25340 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
25350 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
25360 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
25370 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
25380 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
25390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
253a0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
253b0 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65   xLog() */.#ifde
253c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
253d0 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78  SQLLOG.  void(*x
253e0 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71  Sqllog)(void*,sq
253f0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
25400 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  r*, int);.  void
25410 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65   *pSqllogArg;.#e
25420 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
25430 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  TE_VDBE_COVERAGE
25440 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
25450 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  ing callback (if
25460 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e   not NULL) is in
25470 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56  voked on every V
25480 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20  DBE branch.  ** 
25490 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20  operation.  Set 
254a0 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69  the callback usi
254b0 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ng SQLITE_TESTCT
254c0 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  RL_VDBE_COVERAGE
254d0 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ..  */.  void (*
254e0 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69  xVdbeBranch)(voi
254f0 64 2a 2c 75 6e 73 69 67 6e 65 64 20 69 53 72 63  d*,unsigned iSrc
25500 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
25510 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
25520 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
25530 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25560 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
25570 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
25580 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25590 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 20 20  E_DESERIALIZE.  
255a0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78  sqlite3_int64 mx
255b0 4d 65 6d 64 62 53 69 7a 65 3b 20 20 20 20 20 20  MemdbSize;      
255c0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 61 78    /* Default max
255d0 20 6d 65 6d 64 62 20 73 69 7a 65 20 2a 2f 0a 23   memdb size */.#
255e0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
255f0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
25600 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c    int (*xTestCal
25610 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20  lback)(int);    
25620 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62      /* Invoked b
25630 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  y sqlite3FaultSi
25640 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  m() */.#endif.  
25650 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61  int bLocaltimeFa
25660 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ult;            
25670 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69    /* True to fai
25680 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61  l localtime() ca
25690 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 62 49 6e  lls */.  int bIn
256a0 74 65 72 6e 61 6c 46 75 6e 63 74 69 6f 6e 73 3b  ternalFunctions;
256b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
256c0 74 65 72 6e 61 6c 20 53 51 4c 20 66 75 6e 63 74  ternal SQL funct
256d0 69 6f 6e 73 20 61 72 65 20 76 69 73 69 62 6c 65  ions are visible
256e0 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52   */.  int iOnceR
256f0 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20  esetThreshold;  
25700 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20          /* When 
25710 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65  to reset OP_Once
25720 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75   counters */.  u
25730 33 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b 20  32 szSorterRef; 
25740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25750 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e 20   /* Min size in 
25760 62 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f 72  bytes to use sor
25770 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b 0a 0a  ter-refs */.};..
25780 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f  /*.** This macro
25790 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
257a0 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74  of assert() stat
257b0 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61  ements to indica
257c0 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61  te that.** the a
257d0 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61  ssert is only va
257e0 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f  lid on a well-fo
257f0 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 20  rmed database.  
25800 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a  Instead of:.**.*
25810 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
25820 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69  );.**.** One wri
25830 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  tes:.**.**     a
25840 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52  ssert( X || CORR
25850 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20  UPT_DB );.**.** 
25860 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74 72  CORRUPT_DB is tr
25870 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c  ue during normal
25880 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52   operation.  COR
25890 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74  RUPT_DB does not
258a0 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61   indicate.** tha
258b0 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  t the database i
258c0 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72  s definitely cor
258d0 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20  rupt, only that 
258e0 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72  it might be corr
258f0 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74  upt..** For most
25900 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52   test cases, COR
25910 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20 74  RUPT_DB is set t
25920 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20  o false using a 
25930 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74  special.** sqlit
25940 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
25950 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73  ).  This enables
25960 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
25970 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a  ents to prove.**
25980 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72 65   things that are
25990 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72   always true for
259a0 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
259b0 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  abases..*/.#defi
259c0 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28  ne CORRUPT_DB  (
259d0 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65  sqlite3Config.ne
259e0 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a  verCorrupt==0)..
259f0 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f  /*.** Context po
25a00 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77  inter passed dow
25a10 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72  n through the tr
25a20 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75  ee-walk..*/.stru
25a30 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61  ct Walker {.  Pa
25a40 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a60 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65          /* Parse
25a70 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20  r context.  */. 
25a80 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c   int (*xExprCall
25a90 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45  back)(Walker*, E
25aa0 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61  xpr*);     /* Ca
25ab0 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65  llback for expre
25ac0 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
25ad0 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
25ae0 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  k)(Walker*,Selec
25af0 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*);  /* Callbac
25b00 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
25b10 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63  .  void (*xSelec
25b20 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b  tCallback2)(Walk
25b30 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20  er*,Select*);/* 
25b40 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20  Second callback 
25b50 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
25b60 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68   int walkerDepth
25b70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25b80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
25b90 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69  mber of subqueri
25ba0 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65  es */.  u8 eCode
25bb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bd0 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f    /* A small pro
25be0 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a  cessing code */.
25bf0 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
25c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
25c20 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
25c30 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
25c40 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
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 2f 2a 20 4e 61 6d 69 6e          /* Namin
25c70 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20  g context */.   
25c80 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
25c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
25cb0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69  counter */.    i
25cc0 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20  nt iCur;        
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ce0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75           /* A cu
25cf0 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
25d00 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63     SrcList *pSrc
25d10 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
25d20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25d30 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
25d40 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75     struct SrcCou
25d50 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20  nt *pSrcCount;  
25d60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25d70 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20  Counting column 
25d80 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
25d90 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69 6e    struct CCurHin
25da0 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20  t *pCCurHint;   
25db0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
25dc0 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f  sed by codeCurso
25dd0 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69  rHint() */.    i
25de0 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20  nt *aiCol;      
25df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e00 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61           /* arra
25e10 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  y of column inde
25e20 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  xes */.    struc
25e30 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78  t IdxCover *pIdx
25e40 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20  Cover;          
25e50 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
25e60 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65  r index coverage
25e70 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49   */.    struct I
25e80 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64  dxExprTrans *pId
25e90 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  xTrans;         
25ea0 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64 78    /* Convert idx
25eb0 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d  ed expr to colum
25ec0 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  n */.    ExprLis
25ed0 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ef0 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20 63     /* GROUP BY c
25f00 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53 65 6c  lause */.    Sel
25f10 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
25f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f30 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e 47         /* HAVING
25f40 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65   to WHERE clause
25f50 20 63 74 78 20 2a 2f 0a 20 20 20 20 73 74 72 75   ctx */.    stru
25f60 63 74 20 57 69 6e 64 6f 77 52 65 77 72 69 74 65  ct WindowRewrite
25f70 20 2a 70 52 65 77 72 69 74 65 3b 20 20 20 20 20   *pRewrite;     
25f80 20 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f 77 20        /* Window 
25f90 72 65 77 72 69 74 65 20 63 6f 6e 74 65 78 74 20  rewrite context 
25fa0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57 68  */.    struct Wh
25fb0 65 72 65 43 6f 6e 73 74 20 2a 70 43 6f 6e 73 74  ereConst *pConst
25fc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25fd0 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
25fe0 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20   constants */.  
25ff0 20 20 73 74 72 75 63 74 20 52 65 6e 61 6d 65 43    struct RenameC
26000 74 78 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20  tx *pRename;    
26010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
26020 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 63 6f 6e  ENAME COLUMN con
26030 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  text */.  } u;.}
26040 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65  ;../* Forward de
26050 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e  clarations */.in
26060 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
26070 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  r(Walker*, Expr*
26080 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
26090 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65  lkExprList(Walke
260a0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
260b0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
260c0 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53  elect(Walker*, S
260d0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
260e0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78  ite3WalkSelectEx
260f0 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  pr(Walker*, Sele
26100 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
26110 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28  3WalkSelectFrom(
26120 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
26130 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
26140 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65  prWalkNoop(Walke
26150 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
26160 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
26170 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53  kNoop(Walker*, S
26180 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
26190 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46 61  ite3SelectWalkFa
261a0 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  il(Walker*, Sele
261b0 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ct*);.#ifdef SQL
261c0 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73  ITE_DEBUG.void s
261d0 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b  qlite3SelectWalk
261e0 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c  Assert2(Walker*,
261f0 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69   Select*);.#endi
26200 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
26210 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61  code from the pa
26220 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67  rse-tree walking
26230 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20   primitives and 
26240 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63  their.** callbac
26250 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ks..*/.#define W
26260 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30  RC_Continue    0
26270 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64     /* Continue d
26280 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65  own into childre
26290 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  n */.#define WRC
262a0 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20  _Prune       1  
262b0 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65   /* Omit childre
262c0 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77  n but continue w
262d0 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20  alking siblings 
262e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41  */.#define WRC_A
262f0 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f  bort       2   /
26300 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72  * Abandon the tr
26310 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a  ee walk */../*.*
26320 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
26330 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
26340 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74  represents a set
26350 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   of one or more 
26360 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20  CTEs.** (common 
26370 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
26380 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61 20  s) created by a 
26390 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75  single WITH clau
263a0 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69  se..*/.struct Wi
263b0 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b  th {.  int nCte;
263c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
263e0 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65 20   of CTEs in the 
263f0 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20  WITH clause */. 
26400 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20   With *pOuter;  
26410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26420 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57   /* Containing W
26430 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e  ITH clause, or N
26440 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ULL */.  struct 
26450 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20 20  Cte {           
26460 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
26470 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65 20  each CTE in the 
26480 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20  WITH clause.... 
26490 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
264a0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
264b0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
264c0 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
264d0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c    ExprList *pCol
264e0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
264f0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70    /* List of exp
26500 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d  licit column nam
26510 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  es, or NULL */. 
26520 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
26530 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ct;             
26540 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69     /* The defini
26550 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45  tion of this CTE
26560 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   */.    const ch
26570 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20  ar *zCteErr;    
26580 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
26590 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69 72   message for cir
265a0 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73  cular references
265b0 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b   */.  } a[1];.};
265c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
265d0 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  DEBUG./*.** An i
265e0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54  nstance of the T
265f0 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69  reeView object i
26600 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74  s used for print
26610 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ing the content 
26620 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63  of.** data struc
26630 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33  tures on sqlite3
26640 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75 73  DebugPrintf() us
26650 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20  ing a tree-like 
26660 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  view..*/.struct 
26670 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74  TreeView {.  int
26680 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
26690 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65       /* Which le
266a0 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20  vel of the tree 
266b0 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75  we are on */.  u
266c0 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20  8  bLine[100];  
266d0 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76         /* Draw v
266e0 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d  ertical in colum
266f0 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20  n i if bLine[i] 
26700 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65  is true */.};.#e
26710 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
26720 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  EBUG */../*.** T
26730 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 75 73  his object is us
26740 65 64 20 69 6e 20 76 61 72 69 6f 69 75 73 20 77  ed in varioius w
26750 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61 74 65 64  ays, all related
26760 20 74 6f 20 77 69 6e 64 6f 77 20 66 75 6e 63 74   to window funct
26770 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 28 31 29  ions.**.**   (1)
26780 20 41 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e   A single instan
26790 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
267a0 74 75 72 65 20 69 73 20 61 74 74 61 63 68 65 64  ture is attached
267b0 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20 20   to the.**      
267c0 20 74 68 65 20 45 78 70 72 2e 70 57 69 6e 20 66   the Expr.pWin f
267d0 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20 77 69  ield for each wi
267e0 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69 6e  ndow function in
267f0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74   an expression t
26800 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54 68  ree..**       Th
26810 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20  is object holds 
26820 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  the information 
26830 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
26840 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a 2a   OVER clause,.**
26850 20 20 20 20 20 20 20 70 6c 75 73 20 61 64 64 69         plus addi
26860 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 73  tional fields us
26870 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65 20 67  ed during code g
26880 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  eneration..**.**
26890 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e 64 6f     (2) All windo
268a0 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 61  w functions in a
268b0 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 66   single SELECT f
268c0 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73  orm a linked-lis
268d0 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74 61 63  t.**       attac
268e0 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57  hed to Select.pW
268f0 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f 77 2e  in.  The Window.
26900 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f 77  pFunc and Window
26910 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20 20 20  .pExpr.**       
26920 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62 61 63  fields point bac
26930 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65 73 73  k to the express
26940 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
26950 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 2e  window function.
26960 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68 65  .**.**   (3) The
26970 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 57 49   terms of the WI
26980 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66 20 61  NDOW clause of a
26990 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e 73 74   SELECT are inst
269a0 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a 2a 2a  ances of this.**
269b0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f 6e         object on
269c0 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 61   a linked list a
269d0 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63  ttached to Selec
269e0 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a  t.pWinDefn..**.*
269f0 2a 20 54 68 65 20 75 73 65 73 20 28 31 29 20 61  * The uses (1) a
26a00 6e 64 20 28 32 29 20 61 72 65 20 72 65 61 6c 6c  nd (2) are reall
26a10 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64 6f  y the same Windo
26a20 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a 75  w object that ju
26a30 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74 6f  st happens.** to
26a40 20 62 65 20 61 63 63 65 73 73 69 62 6c 65 20 69   be accessible i
26a50 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74 20  n two different 
26a60 77 61 79 73 2e 20 20 55 73 65 20 28 33 29 20 69  ways.  Use (3) i
26a70 73 20 61 72 65 20 73 65 70 61 72 61 74 65 20 6f  s are separate o
26a80 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
26a90 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68 61  t Window {.  cha
26aa0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
26ab0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
26ac0 77 69 6e 64 6f 77 20 28 6d 61 79 20 62 65 20 4e  window (may be N
26ad0 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ULL) */.  ExprLi
26ae0 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b 20  st *pPartition; 
26af0 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20 42    /* PARTITION B
26b00 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
26b10 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
26b20 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  ;     /* ORDER B
26b30 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38  Y clause */.  u8
26b40 20 65 54 79 70 65 3b 20 20 20 20 20 20 20 20 20   eType;         
26b50 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e 47        /* TK_RANG
26b60 45 20 6f 72 20 54 4b 5f 52 4f 57 53 20 2a 2f 0a  E or TK_ROWS */.
26b70 20 20 75 38 20 65 53 74 61 72 74 3b 20 20 20 20    u8 eStart;    
26b80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42            /* UNB
26b90 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c  OUNDED, CURRENT,
26ba0 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f   PRECEDING or FO
26bb0 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20  LLOWING */.  u8 
26bc0 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  eEnd;           
26bd0 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45       /* UNBOUNDE
26be0 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45 43  D, CURRENT, PREC
26bf0 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49  EDING or FOLLOWI
26c00 4e 47 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 53  NG */.  Expr *pS
26c10 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
26c20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f  /* Expression fo
26c30 72 20 22 3c 65 78 70 72 3e 20 50 52 45 43 45 44  r "<expr> PRECED
26c40 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ING" */.  Expr *
26c50 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
26c60 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
26c70 66 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c 4c  for "<expr> FOLL
26c80 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e 64  OWING" */.  Wind
26c90 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20 20  ow *pNextWin;   
26ca0 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e 64      /* Next wind
26cb0 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c 6f  ow function belo
26cc0 6e 67 69 6e 67 20 74 6f 20 74 68 69 73 20 53 45  nging to this SE
26cd0 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  LECT */.  Expr *
26ce0 70 46 69 6c 74 65 72 3b 20 20 20 20 20 20 20 20  pFilter;        
26cf0 20 20 2f 2a 20 54 68 65 20 46 49 4c 54 45 52 20    /* The FILTER 
26d00 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
26d10 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
26d20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66          /* The f
26d30 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  unction */.  int
26d40 20 69 45 70 68 43 73 72 3b 20 20 20 20 20 20 20   iEphCsr;       
26d50 20 20 20 20 20 2f 2a 20 50 61 72 74 69 74 69 6f       /* Partitio
26d60 6e 20 62 75 66 66 65 72 20 6f 72 20 50 65 65 72  n buffer or Peer
26d70 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
26d80 20 72 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e 74   regAccum;.  int
26d90 20 72 65 67 52 65 73 75 6c 74 3b 0a 20 20 69 6e   regResult;.  in
26da0 74 20 63 73 72 41 70 70 3b 20 20 20 20 20 20 20  t csrApp;       
26db0 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f        /* Functio
26dc0 6e 20 63 75 72 73 6f 72 20 28 75 73 65 64 20 62  n cursor (used b
26dd0 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20  y min/max) */.  
26de0 69 6e 74 20 72 65 67 41 70 70 3b 20 20 20 20 20  int regApp;     
26df0 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74          /* Funct
26e00 69 6f 6e 20 72 65 67 69 73 74 65 72 20 28 61 6c  ion register (al
26e10 73 6f 20 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d  so used by min/m
26e20 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ax) */.  int reg
26e30 50 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  Part;           
26e40 20 2f 2a 20 46 69 72 73 74 20 69 6e 20 61 20 73   /* First in a s
26e50 65 74 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  et of registers 
26e60 68 6f 6c 64 69 6e 67 20 50 41 52 54 49 54 49 4f  holding PARTITIO
26e70 4e 20 42 59 0a 20 20 20 20 20 20 20 20 20 20 20  N BY.           
26e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
26e90 2a 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 76  * and ORDER BY v
26ea0 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 77 69  alues for the wi
26eb0 6e 64 6f 77 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ndow */.  Expr *
26ec0 70 4f 77 6e 65 72 3b 20 20 20 20 20 20 20 20 20  pOwner;         
26ed0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
26ee0 6f 62 6a 65 63 74 20 74 68 69 73 20 77 69 6e 64  object this wind
26ef0 6f 77 20 69 73 20 61 74 74 61 63 68 65 64 20 74  ow is attached t
26f00 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66 66  o */.  int nBuff
26f10 65 72 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f  erCol;         /
26f20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
26f30 6d 6e 73 20 69 6e 20 62 75 66 66 65 72 20 74 61  mns in buffer ta
26f40 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72  ble */.  int iAr
26f50 67 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  gCol;           
26f60 20 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20 66 69   /* Offset of fi
26f70 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f 72  rst argument for
26f80 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 2a   this function *
26f90 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  /.};..#ifndef SQ
26fa0 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57  LITE_OMIT_WINDOW
26fb0 46 55 4e 43 0a 76 6f 69 64 20 73 71 6c 69 74 65  FUNC.void sqlite
26fc0 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 73 71  3WindowDelete(sq
26fd0 6c 69 74 65 33 2a 2c 20 57 69 6e 64 6f 77 2a 29  lite3*, Window*)
26fe0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
26ff0 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74 65 28 73  ndowListDelete(s
27000 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64  qlite3 *db, Wind
27010 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a  ow *p);.Window *
27020 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c 6c  sqlite3WindowAll
27030 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  oc(Parse*, int, 
27040 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74 20  int, Expr*, int 
27050 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
27060 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61  qlite3WindowAtta
27070 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
27080 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74 20  , Window*);.int 
27090 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 6d  sqlite3WindowCom
270a0 70 61 72 65 28 50 61 72 73 65 2a 2c 20 57 69 6e  pare(Parse*, Win
270b0 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a  dow*, Window*);.
270c0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
270d0 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73 65  owCodeInit(Parse
270e0 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69  *, Window*);.voi
270f0 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43  d sqlite3WindowC
27100 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c 20  odeStep(Parse*, 
27110 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49 6e  Select*, WhereIn
27120 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  fo*, int, int);.
27130 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  int sqlite3Windo
27140 77 52 65 77 72 69 74 65 28 50 61 72 73 65 2a 2c  wRewrite(Parse*,
27150 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
27160 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62 71  qlite3ExpandSubq
27170 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74 72  uery(Parse*, str
27180 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
27190 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
271a0 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61 72  WindowUpdate(Par
271b0 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69  se*, Window*, Wi
271c0 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29  ndow*, FuncDef*)
271d0 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
271e0 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69 74  3WindowDup(sqlit
271f0 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f  e3 *db, Expr *pO
27200 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29  wner, Window *p)
27210 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
27220 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28 73  3WindowListDup(s
27230 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64  qlite3 *db, Wind
27240 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c  ow *p);.void sql
27250 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
27260 6f 6e 73 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  ons(void);.#else
27270 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27280 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61 2c  3WindowDelete(a,
27290 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  b).# define sqli
272a0 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f  te3WindowFunctio
272b0 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73 71  ns().# define sq
272c0 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63  lite3WindowAttac
272d0 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66 0a  h(a,b,c).#endif.
272e0 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
272f0 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
27300 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
27310 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
27320 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
27330 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
27340 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
27350 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
27360 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
27370 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
27380 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
27390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273a0 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
273b0 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
273c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273d0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
273e0 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
273f0 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
27400 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
27410 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
27420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
27450 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
27460 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
27470 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
27480 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
27490 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
274a0 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
274b0 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
274c0 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
274d0 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
274e0 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
274f0 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
27500 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
27510 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
27520 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
27530 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
27540 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
27550 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
27560 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
27570 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
27580 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
27590 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f 72  int sqlite3Repor
275a0 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72 2c  tError(int iErr,
275b0 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e   int lineno, con
275c0 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29 3b  st char *zType);
275d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72  .int sqlite3Corr
275e0 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  uptError(int);.i
275f0 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  nt sqlite3Misuse
27600 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
27610 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
27620 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69  rror(int);.#defi
27630 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
27640 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f  T_BKPT sqlite3Co
27650 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
27660 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
27670 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20  ITE_MISUSE_BKPT 
27680 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
27690 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
276a0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  fine SQLITE_CANT
276b0 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65  OPEN_BKPT sqlite
276c0 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f  3CantopenError(_
276d0 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20  _LINE__).#ifdef 
276e0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
276f0 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  nt sqlite3NomemE
27700 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74  rror(int);.  int
27710 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d   sqlite3Ioerrnom
27720 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20  emError(int);.  
27730 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
27740 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c  ptPgnoError(int,
27750 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20  Pgno);.# define 
27760 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
27770 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  T sqlite3NomemEr
27780 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20  ror(__LINE__).# 
27790 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
277a0 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73  ERR_NOMEM_BKPT s
277b0 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
277c0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
277d0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
277e0 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20  CORRUPT_PGNO(P) 
277f0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67  sqlite3CorruptPg
27800 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  noError(__LINE__
27810 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65  ,(P)).#else.# de
27820 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  fine SQLITE_NOME
27830 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f  M_BKPT SQLITE_NO
27840 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MEM.# define SQL
27850 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f  ITE_IOERR_NOMEM_
27860 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52  BKPT SQLITE_IOER
27870 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65  R_NOMEM.# define
27880 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
27890 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43  PGNO(P) sqlite3C
278a0 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
278b0 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  NE__).#endif../*
278c0 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53  .** FTS3 and FTS
278d0 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76  4 both require v
278e0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70  irtual table sup
278f0 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69  port.*/.#if defi
27900 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27910 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20  VIRTUALTABLE).# 
27920 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
27930 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66  BLE_FTS3.# undef
27940 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
27950 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  TS4.#endif../*.*
27960 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
27970 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
27980 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
27990 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
279a0 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
279b0 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
279c0 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
279d0 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61  usion we also ca
279e0 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
279f0 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
27a00 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
27a10 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49  n alias for SQLI
27a20 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
27a30 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
27a40 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27a50 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
27a60 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27a70 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
27a80 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31  TE_ENABLE_FTS3 1
27a90 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
27aa0 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65  he ctype.h heade
27ab0 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20  r is needed for 
27ac0 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d  non-ASCII system
27ad0 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a  s.  It is also.*
27ae0 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33  * needed by FTS3
27af0 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e   when FTS3 is in
27b00 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d  cluded in the am
27b10 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23  algamation..*/.#
27b20 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
27b30 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20  TE_ASCII) || \. 
27b40 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
27b50 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20  TE_ENABLE_FTS3) 
27b60 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
27b70 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29  E_AMALGAMATION))
27b80 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  .# include <ctyp
27b90 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e.h>.#endif../*.
27ba0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
27bb0 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68   macros mimic th
27bc0 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
27bd0 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75  ry functions tou
27be0 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61  pper(),.** isspa
27bf0 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c  ce(), isalnum(),
27c00 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69   isdigit() and i
27c10 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65  sxdigit(), respe
27c20 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20  ctively. The.** 
27c30 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  sqlite versions 
27c40 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53  only work for AS
27c50 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20  CII characters, 
27c60 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
27c70 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  cale..*/.#ifdef 
27c80 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64  SQLITE_ASCII.# d
27c90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
27ca0 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28  pper(x)  ((x)&~(
27cb0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
27cc0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27cd0 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66  x)]&0x20)).# def
27ce0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
27cf0 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ce(x)   (sqlite3
27d00 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
27d10 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
27d20 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  1).# define sqli
27d30 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
27d40 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
27d50 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
27d60 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66  (x)]&0x06).# def
27d70 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
27d80 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ha(x)   (sqlite3
27d90 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
27da0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
27db0 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  2).# define sqli
27dc0 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
27dd0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
27de0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
27df0 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66  (x)]&0x04).# def
27e00 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
27e10 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33  git(x)  (sqlite3
27e20 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
27e30 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
27e40 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  8).# define sqli
27e50 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
27e60 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c  (sqlite3UpperToL
27e70 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63  ower[(unsigned c
27e80 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69  har)(x)]).# defi
27e90 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74  ne sqlite3Isquot
27ea0 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(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 38 30  d char)(x)]&0x80
27ed0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
27ee0 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
27ef0 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e  x)   toupper((un
27f00 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
27f10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27f20 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73  3Isspace(x)   is
27f30 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20  space((unsigned 
27f40 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
27f50 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
27f60 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28  m(x)   isalnum((
27f70 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27f80 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
27f90 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
27fa0 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65  isalpha((unsigne
27fb0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
27fc0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
27fd0 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74  git(x)   isdigit
27fe0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
27ff0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
28000 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
28010 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69    isxdigit((unsi
28020 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
28030 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
28040 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f  olower(x)   tolo
28050 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  wer((unsigned ch
28060 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
28070 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28   sqlite3Isquote(
28080 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c  x)   ((x)=='"'||
28090 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d  (x)=='\''||(x)==
280a0 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23  '['||(x)=='`').#
280b0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
280c0 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a  3IsIdChar(u8);..
280d0 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
280e0 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
280f0 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  es.*/.int sqlite
28100 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63  3StrICmp(const c
28110 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
28120 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
28130 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
28140 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
28150 69 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28 43  ite3Strlen30NN(C
28160 29 20 28 73 74 72 6c 65 6e 28 43 29 26 30 78 33  ) (strlen(C)&0x3
28170 66 66 66 66 66 66 66 29 0a 63 68 61 72 20 2a 73  fffffff).char *s
28180 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65  qlite3ColumnType
28190 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b  (Column*,char*);
281a0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
281b0 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33  StrNICmp sqlite3
281c0 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73  _strnicmp..int s
281d0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74  qlite3MallocInit
281e0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
281f0 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f  ite3MallocEnd(vo
28200 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  id);.void *sqlit
28210 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76  e3Malloc(u64);.v
28220 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
28230 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69  ocZero(u64);.voi
28240 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
28250 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c  ocZero(sqlite3*,
28260 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
28270 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
28280 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
28290 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
282a0 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74  allocRawNN(sqlit
282b0 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  e3*, u64);.char 
282c0 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
282d0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
282e0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
282f0 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
28300 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
28310 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  ar*, u64);.char 
28320 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75  *sqlite3DbSpanDu
28330 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
28340 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
28350 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r*);.void *sqlit
28360 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
28370 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
28380 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
28390 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
283a0 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
283b0 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
283c0 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
283d0 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
283e0 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
283f0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
28400 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
28410 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  FreeNN(sqlite3*,
28420 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
28430 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
28440 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
28450 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
28460 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
28470 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
28480 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
28490 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
284a0 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
284b0 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
284c0 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66  fault(void);.#if
284d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
284e0 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
284f0 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
28500 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
28510 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
28520 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  id));.#endif.int
28530 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
28540 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
28550 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
28560 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
28570 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
28580 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
28590 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
285a0 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
285b0 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
285c0 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
285d0 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
285e0 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
285f0 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
28600 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
28610 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
28620 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
28630 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
28640 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
28650 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
28660 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
28670 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
28680 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
28690 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
286a0 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
286b0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
286c0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
286d0 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
286e0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
286f0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
28700 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
28710 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
28720 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
28730 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64  e(D,P).#else.# d
28740 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
28750 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
28760 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
28770 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
28780 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
28790 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
287a0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
287b0 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
287c0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
287d0 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
287e0 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
287f0 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f  #endif../* Do no
28800 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d  t allow both MEM
28810 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33  SYS5 and MEMSYS3
28820 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74   to be defined t
28830 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65  ogether.  If the
28840 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c  y.** are, disabl
28850 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66  e MEMSYS3.*/.#if
28860 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
28870 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20  E_MEMSYS5.const 
28880 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
28890 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
288a0 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b  etMemsys5(void);
288b0 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  .#undef SQLITE_E
288c0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65  NABLE_MEMSYS3.#e
288d0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
288e0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
288f0 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
28900 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
28910 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
28920 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
28930 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
28940 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71  _MUTEX_OMIT.  sq
28950 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
28960 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
28970 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76  e3DefaultMutex(v
28980 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
28990 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
289a0 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70  nst *sqlite3Noop
289b0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
289c0 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
289d0 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
289e0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
289f0 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69  te3MutexInit(voi
28a00 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  d);.  int sqlite
28a10 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b  3MutexEnd(void);
28a20 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
28a30 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
28a40 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69  X_OMIT) && !defi
28a50 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
28a60 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71  _NOOP).  void sq
28a70 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
28a80 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  er(void);.#else.
28a90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28aa0 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a  MemoryBarrier().
28ab0 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f  #endif..sqlite3_
28ac0 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61  int64 sqlite3Sta
28ad0 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76  tusValue(int);.v
28ae0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
28af0 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  sUp(int, int);.v
28b00 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
28b10 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b  sDown(int, int);
28b20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
28b30 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74  tusHighwater(int
28b40 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
28b50 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64  te3LookasideUsed
28b60 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b  (sqlite3*,int*);
28b70 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d  ../* Access to m
28b80 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73  utexes used by s
28b90 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20  qlite3_status() 
28ba0 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  */.sqlite3_mutex
28bb0 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31   *sqlite3Pcache1
28bc0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c  Mutex(void);.sql
28bd0 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
28be0 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76  te3MallocMutex(v
28bf0 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e  oid);..#if defin
28c00 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
28c10 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43  _MULTITHREADED_C
28c20 48 45 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e  HECKS) && !defin
28c30 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
28c40 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74  OMIT).void sqlit
28c50 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e  e3MutexWarnOnCon
28c60 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f  tention(sqlite3_
28c70 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23  mutex*);.#else.#
28c80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
28c90 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e  utexWarnOnConten
28ca0 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a  tion(x).#endif..
28cb0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
28cc0 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
28cd0 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
28ce0 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
28cf0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
28d00 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
28d10 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
28d20 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
28d30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
28d40 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
28d50 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
28d60 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
28d70 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
28d80 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
28d90 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
28da0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
28db0 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
28dc0 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
28dd0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
28de0 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
28df0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
28e00 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
28e10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
28e20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
28e30 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
28e40 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
28e50 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
28e60 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
28e70 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72  lues */.};..char
28e80 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66   *sqlite3MPrintf
28e90 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
28ea0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
28eb0 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e  r *sqlite3VMPrin
28ec0 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
28ed0 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
28ee0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
28ef0 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
28f00 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
28f10 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20  AVE_OS_TRACE).  
28f20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
28f30 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
28f40 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
28f50 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
28f60 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
28f70 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
28f80 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
28f90 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
28fa0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
28fb0 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73  _DEBUG).  void s
28fc0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
28fd0 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  pr(TreeView*, co
28fe0 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  nst Expr*, u8);.
28ff0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29000 65 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69  eeViewBareExprLi
29010 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
29020 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  nst ExprList*, c
29030 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
29040 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
29050 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65  iewExprList(Tree
29060 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
29070 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73  rList*, u8, cons
29080 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
29090 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
290a0 53 72 63 4c 69 73 74 28 54 72 65 65 56 69 65 77  SrcList(TreeView
290b0 2a 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69 73 74  *, const SrcList
290c0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
290d0 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74  e3TreeViewSelect
290e0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
290f0 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a  t Select*, u8);.
29100 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29110 65 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56  eeViewWith(TreeV
29120 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68  iew*, const With
29130 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  *, u8);.#ifndef 
29140 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
29150 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64 20 73 71  OWFUNC.  void sq
29160 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 6e  lite3TreeViewWin
29170 64 6f 77 28 54 72 65 65 56 69 65 77 2a 2c 20 63  dow(TreeView*, c
29180 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38  onst Window*, u8
29190 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
291a0 33 54 72 65 65 56 69 65 77 57 69 6e 46 75 6e 63  3TreeViewWinFunc
291b0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
291c0 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a  t Window*, u8);.
291d0 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a  #endif.#endif...
291e0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
291f0 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
29200 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
29210 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
29220 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
29230 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
29240 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
29250 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
29260 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
29270 65 71 75 6f 74 65 45 78 70 72 28 45 78 70 72 2a  equoteExpr(Expr*
29280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
29290 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c  okenInit(Token*,
292a0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
292b0 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
292c0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
292d0 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
292e0 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
292f0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
29300 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
29310 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
29320 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
29330 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
29340 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
29350 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
29360 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
29370 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
29380 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
29390 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
293a0 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
293b0 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
293c0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
293d0 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
293e0 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
293f0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
29400 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
29410 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28  3NoTempsInRange(
29420 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
29430 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71  .#endif.Expr *sq
29440 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
29450 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
29460 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
29470 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
29480 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
29490 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
294a0 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
294b0 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
294c0 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
294d0 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
294e0 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
294f0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
29500 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
29510 74 65 33 50 45 78 70 72 41 64 64 53 65 6c 65 63  te3PExprAddSelec
29520 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
29530 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20   Select*);.Expr 
29540 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28  *sqlite3ExprAnd(
29550 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20  sqlite3*,Expr*, 
29560 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
29570 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f  lite3ExprFunctio
29580 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
29590 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  t*, Token*, int)
295a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
295b0 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
295c0 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
295d0 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
295e0 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
295f0 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
29600 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
29610 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
29620 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
29630 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73  ,Expr*);.ExprLis
29640 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
29650 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50  stAppendVector(P
29660 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
29670 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  IdList*,Expr*);.
29680 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29690 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72  ListSetSortOrder
296a0 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  (ExprList*,int);
296b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
296c0 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
296d0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
296e0 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
296f0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
29700 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
29710 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  prList*,const ch
29720 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
29730 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29740 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  prListDelete(sql
29750 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ite3*, ExprList*
29760 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78  );.u32 sqlite3Ex
29770 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73  prListFlags(cons
29780 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  t ExprList*);.in
29790 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 48 61  t sqlite3IndexHa
297a0 73 44 75 70 6c 69 63 61 74 65 52 6f 6f 74 50 61  sDuplicateRootPa
297b0 67 65 28 49 6e 64 65 78 2a 29 3b 0a 69 6e 74 20  ge(Index*);.int 
297c0 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69  sqlite3Init(sqli
297d0 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  te3*, char**);.i
297e0 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
297f0 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e  llback(void*, in
29800 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a  t, char**, char*
29810 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
29820 6e 69 74 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c  nitOne(sqlite3*,
29830 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 75 33   int, char**, u3
29840 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
29850 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f  Pragma(Parse*,To
29860 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
29870 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  n*,int);.#ifndef
29880 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
29890 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65  TUALTABLE.Module
298a0 20 2a 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56   *sqlite3PragmaV
298b0 74 61 62 52 65 67 69 73 74 65 72 28 73 71 6c 69  tabRegister(sqli
298c0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20  te3*,const char 
298d0 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a  *zName);.#endif.
298e0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
298f0 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
29900 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  nection(sqlite3*
29910 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29920 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71  esetOneSchema(sq
29930 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
29940 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73  d sqlite3Collaps
29950 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73  eDatabaseArray(s
29960 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
29970 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65  qlite3CommitInte
29980 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69  rnalChanges(sqli
29990 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
299a0 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e  te3DeleteColumnN
299b0 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61  ames(sqlite3*,Ta
299c0 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
299d0 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70  e3ColumnsFromExp
299e0 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70  rList(Parse*,Exp
299f0 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75  rList*,i16*,Colu
29a00 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  mn**);.void sqli
29a10 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75  te3SelectAddColu
29a20 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69  mnTypeAndCollati
29a30 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  on(Parse*,Table*
29a40 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65  ,Select*);.Table
29a50 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53   *sqlite3ResultS
29a60 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65  etOfSelect(Parse
29a70 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64  *,Select*);.void
29a80 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74   sqlite3OpenMast
29a90 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c  erTable(Parse *,
29aa0 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71   int);.Index *sq
29ab0 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49  lite3PrimaryKeyI
29ac0 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31  ndex(Table*);.i1
29ad0 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f  6 sqlite3ColumnO
29ae0 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69  fIndex(Index*, i
29af0 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  16);.void sqlite
29b00 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73  3StartTable(Pars
29b10 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
29b20 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
29b30 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e  );.#if SQLITE_EN
29b40 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
29b50 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  MNS.  void sqlit
29b60 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69  e3ColumnProperti
29b70 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65  esFromName(Table
29b80 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c  *, Column*);.#el
29b90 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
29ba0 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74  te3ColumnPropert
29bb0 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29  iesFromName(T,C)
29bc0 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e   /* no-op */.#en
29bd0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
29be0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  AddColumn(Parse*
29bf0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b  ,Token*,Token*);
29c00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
29c10 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
29c20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29c30 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28  e3AddPrimaryKey(
29c40 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
29c50 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
29c60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
29c70 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e  ddCheckConstrain
29c80 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  t(Parse*, Expr*)
29c90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
29ca0 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61  dDefaultValue(Pa
29cb0 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
29cc0 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
29cd0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
29ce0 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
29cf0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
29d00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
29d10 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
29d20 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
29d30 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
29d40 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
29d50 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
29d60 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
29d70 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
29d80 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
29d90 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
29da0 20 2a 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c   **);.#ifdef SQL
29db0 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
29dc0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 63  int sqlite3Codec
29dd0 51 75 65 72 79 50 61 72 61 6d 65 74 65 72 73 28  QueryParameters(
29de0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
29df0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
29e00 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29e10 65 20 73 71 6c 69 74 65 33 43 6f 64 65 63 51 75  e sqlite3CodecQu
29e20 65 72 79 50 61 72 61 6d 65 74 65 72 73 28 41 2c  eryParameters(A,
29e30 42 2c 43 29 20 30 0a 23 65 6e 64 69 66 0a 42 74  B,C) 0.#endif.Bt
29e40 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61  ree *sqlite3DbNa
29e50 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65  meToBtree(sqlite
29e60 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
29e70 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
29e80 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66  UNTESTABLE.# def
29e90 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
29ea0 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
29eb0 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
29ec0 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
29ed0 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
29ee0 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
29ef0 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
29f00 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
29f10 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
29f20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
29f30 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42  vecTestNotNull(B
29f40 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
29f50 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
29f60 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
29f70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
29f80 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
29f90 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
29fa0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
29fb0 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
29fc0 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
29fd0 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
29fe0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
29ff0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e  TE_UNTESTABLE.in
2a000 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
2a010 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
2a020 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f  nt*);.#endif..Ro
2a030 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
2a040 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
2a050 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2a060 6f 77 53 65 74 44 65 6c 65 74 65 28 76 6f 69 64  owSetDelete(void
2a070 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a080 52 6f 77 53 65 74 43 6c 65 61 72 28 76 6f 69 64  RowSetClear(void
2a090 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a0a0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77  RowSetInsert(Row
2a0b0 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20  Set*, i64);.int 
2a0c0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
2a0d0 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69  t(RowSet*, int i
2a0e0 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
2a0f0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
2a100 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
2a110 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2a120 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
2a130 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
2a140 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
2a150 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74  ,Select*,int,int
2a160 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
2a170 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
2a180 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53  W) || !defined(S
2a190 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2a1a0 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73  ALTABLE).  int s
2a1b0 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
2a1c0 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  umnNames(Parse*,
2a1d0 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
2a1e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2a1f0 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
2a200 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a  s(A,B) 0.#endif.
2a210 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
2a220 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e  ATTACHED>30.  in
2a230 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41  t sqlite3DbMaskA
2a240 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b  llZero(yDbMask);
2a250 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2a260 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61  ite3DropTable(Pa
2a270 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2a280 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2a290 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54  sqlite3CodeDropT
2a2a0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62  able(Parse*, Tab
2a2b0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
2a2c0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2a2d0 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
2a2e0 2c 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  , Table*);.void 
2a2f0 73 71 6c 69 74 65 33 46 72 65 65 49 6e 64 65 78  sqlite3FreeIndex
2a300 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
2a310 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2a320 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
2a330 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c  EMENT.  void sql
2a340 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
2a350 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50  tBegin(Parse *pP
2a360 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71  arse);.  void sq
2a370 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
2a380 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61  ntEnd(Parse *pPa
2a390 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  rse);.#else.# de
2a3a0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
2a3b0 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58  incrementBegin(X
2a3c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2a3d0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
2a3e0 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69  nd(X).#endif.voi
2a3f0 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28  d sqlite3Insert(
2a400 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2a410 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
2a420 74 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a  t*, int, Upsert*
2a430 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
2a440 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
2a450 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
2a460 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
2a470 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
2a480 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
2a490 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
2a4a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
2a4b0 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
2a4c0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2a4d0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
2a4e0 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 50  SrcListEnlarge(P
2a4f0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2a500 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c   int, int);.SrcL
2a510 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
2a520 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
2a530 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2a540 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63  n*, Token*);.Src
2a550 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
2a560 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65  ListAppendFromTe
2a570 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rm(Parse*, SrcLi
2a580 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
2a590 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
2a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5b0 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
2a5c0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
2a5d0 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
2a5e0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
2a5f0 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20  IndexedBy(Parse 
2a600 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f  *, SrcList *, To
2a610 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
2a620 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41  ite3SrcListFuncA
2a630 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rgs(Parse*, SrcL
2a640 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ist*, ExprList*)
2a650 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
2a660 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72  exedByLookup(Par
2a670 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63  se *, struct Src
2a680 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f  List_item *);.vo
2a690 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
2a6a0 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53  tShiftJoinType(S
2a6b0 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
2a6c0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73  qlite3SrcListAss
2a6d0 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65  ignCursors(Parse
2a6e0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  *, SrcList*);.vo
2a6f0 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  id sqlite3IdList
2a700 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
2a710 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
2a720 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65  sqlite3SrcListDe
2a730 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
2a740 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20  rcList*);.Index 
2a750 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65  *sqlite3Allocate
2a760 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69  IndexObject(sqli
2a770 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61  te3*,i16,int,cha
2a780 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r**);.void sqlit
2a790 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
2a7a0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
2a7b0 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
2a7c0 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
2a7d0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2a7e0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
2a7f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  *, int, int, u8)
2a800 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ;.void sqlite3Dr
2a810 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  opIndex(Parse*, 
2a820 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
2a830 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
2a840 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  t(Parse*, Select
2a850 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b  *, SelectDest*);
2a860 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
2a870 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a  SelectNew(Parse*
2a880 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69  ,ExprList*,SrcLi
2a890 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
2a8a0 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
2a8c0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33  pr*,ExprList*,u3
2a8d0 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  2,Expr*);.void s
2a8e0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
2a8f0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
2a900 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
2a910 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
2a920 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
2a930 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2a940 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
2a950 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
2a960 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
2a970 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
2a980 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
2a990 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
2a9a0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2a9b0 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
2a9c0 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
2a9d0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2a9e0 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
2a9f0 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
2aa00 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
2aa10 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
2aa20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
2aa30 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
2aa40 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2aa50 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
2aa60 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45  cList*, Expr*, E
2aa70 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29  xprList*, Expr*)
2aa80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70  ;.void sqlite3Up
2aa90 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63  date(Parse*, Src
2aaa0 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
2aab0 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c  ,Expr*,int,ExprL
2aac0 69 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20 20  ist*,Expr*,.    
2aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
2aae0 70 73 65 72 74 2a 29 3b 0a 57 68 65 72 65 49 6e  psert*);.WhereIn
2aaf0 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65  fo *sqlite3Where
2ab00 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63  Begin(Parse*,Src
2ab10 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
2ab20 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
2ab30 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  u16,int);.void s
2ab40 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57  qlite3WhereEnd(W
2ab50 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45  hereInfo*);.LogE
2ab60 73 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  st sqlite3WhereO
2ab70 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68  utputRowCount(Wh
2ab80 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2ab90 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
2aba0 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a  tinct(WhereInfo*
2abb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2abc0 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65  ereIsOrdered(Whe
2abd0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2abe0 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65 72 42  lite3WhereOrderB
2abf0 79 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28 57  yLimitOptLabel(W
2ac00 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2ac10 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
2ac20 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
2ac30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
2ac40 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
2ac50 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2ac60 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
2ac70 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
2ac80 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2ac90 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
2aca0 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
2acb0 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  ;.#define ONEPAS
2acc0 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20  S_OFF      0    
2acd0 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e      /* Use of ON
2ace0 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65  EPASS not allowe
2acf0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45  d */.#define ONE
2ad00 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20  PASS_SINGLE   1 
2ad10 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53         /* ONEPAS
2ad20 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69  S valid for a si
2ad30 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20  ngle row update 
2ad40 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
2ad50 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20  SS_MULTI    2   
2ad60 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
2ad70 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c  is valid for mul
2ad80 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f  tiple rows */.vo
2ad90 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2ada0 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d  deLoadIndexColum
2adb0 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  n(Parse*, Index*
2adc0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
2add0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2ade0 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
2adf0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2ae00 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
2ae10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2ae20 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
2ae30 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54  OfTable(Vdbe*, T
2ae40 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
2ae50 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2ae60 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28  te3ExprCodeMove(
2ae70 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
2ae80 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2ae90 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
2aea0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2aeb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2aec0 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65  prCodeCopy(Parse
2aed0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2aee0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2aef0 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50  CodeFactorable(P
2af00 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2af10 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2af20 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61  xprCodeAtInit(Pa
2af30 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2af40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2af50 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
2af60 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
2af70 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2af80 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
2af90 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2afa0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2afb0 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
2afc0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2afd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2afe0 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
2aff0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2b000 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
2b010 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2b020 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30  CEL_DUP      0x0
2b030 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20  1  /* Deep, not 
2b040 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a  shallow copies *
2b050 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2b060 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30  _ECEL_FACTOR   0
2b070 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f  x02  /* Factor o
2b080 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d  ut constant term
2b090 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
2b0a0 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20  ITE_ECEL_REF    
2b0b0 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45    0x04  /* Use E
2b0c0 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64  xprList.u.x.iOrd
2b0d0 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69  erByCol */.#defi
2b0e0 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f  ne SQLITE_ECEL_O
2b0f0 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a  MITREF  0x08  /*
2b100 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73   Omit if ExprLis
2b110 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
2b120 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  l */.void sqlite
2b130 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
2b140 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2b150 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b160 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
2b170 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2b180 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2b190 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44  ite3ExprIfFalseD
2b1a0 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  up(Parse*, Expr*
2b1b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
2b1c0 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
2b1d0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
2b1e0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2b1f0 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
2b200 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20   LOCATE_VIEW    
2b210 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43  0x01.#define LOC
2b220 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32  ATE_NOERR   0x02
2b230 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
2b240 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65  ocateTable(Parse
2b250 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73  *,u32 flags,cons
2b260 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2b270 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
2b280 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
2b290 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20  Item(Parse*,u32 
2b2a0 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63  flags,struct Src
2b2b0 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
2b2c0 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
2b2d0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
2b2e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2b2f0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2b300 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2b310 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
2b320 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
2b330 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2b340 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2b350 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
2b360 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2b370 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2b380 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65  cuum(Parse*,Toke
2b390 6e 2a 2c 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  n*,Expr*);.int s
2b3a0 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
2b3b0 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
2b3c0 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
2b3d0 61 6c 75 65 2a 29 3b 0a 63 68 61 72 20 2a 73 71  alue*);.char *sq
2b3e0 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b  lite3NameFromTok
2b3f0 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  en(sqlite3*, Tok
2b400 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2b410 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72  3ExprCompare(Par
2b420 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  se*,Expr*, Expr*
2b430 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2b440 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b  te3ExprCompareSk
2b450 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  ip(Expr*, Expr*,
2b460 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2b470 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
2b480 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
2b490 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  rList*, int);.in
2b4a0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
2b4b0 6c 69 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c  liesExpr(Parse*,
2b4c0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
2b4d0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2b4e0 78 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c  xprImpliesNonNul
2b4f0 6c 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b  lRow(Expr*,int);
2b500 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2b510 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
2b520 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
2b530 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2b540 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
2b550 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
2b560 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
2b570 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2b580 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45  CoveredByIndex(E
2b590 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  xpr*, int iCur, 
2b5a0 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e  Index *pIdx);.in
2b5b0 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
2b5c0 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
2b5d0 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
2b5e0 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
2b5f0 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  dbe(Parse*);.#if
2b600 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
2b610 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
2b620 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
2b630 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
2b640 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
2b650 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64  tate(void);.#end
2b660 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
2b670 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
2b680 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
2b690 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
2b6a0 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69  Schema(Parse*, i
2b6b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b6c0 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64  3CodeVerifyNamed
2b6d0 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63  Schema(Parse*, c
2b6e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b  onst char *zDb);
2b6f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
2b700 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  inTransaction(Pa
2b710 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
2b720 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73   sqlite3EndTrans
2b730 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e  action(Parse*,in
2b740 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b750 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
2b760 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
2b770 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
2b780 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
2b790 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
2b7a0 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
2b7b0 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
2b7c0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2b7d0 74 65 33 45 78 70 72 49 64 54 6f 54 72 75 65 46  te3ExprIdToTrueF
2b7e0 61 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  alse(Expr*);.int
2b7f0 20 73 71 6c 69 74 65 33 45 78 70 72 54 72 75 74   sqlite3ExprTrut
2b800 68 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70  hValue(const Exp
2b810 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2b820 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45  ExprIsConstant(E
2b830 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2b840 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
2b850 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a  NotJoin(Expr*);.
2b860 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2b870 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74  sConstantOrFunct
2b880 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a  ion(Expr*, u8);.
2b890 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2b8a0 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70  sConstantOrGroup
2b8b0 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  By(Parse*, Expr*
2b8c0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
2b8d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
2b8e0 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
2b8f0 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  r*,int);.#ifdef 
2b900 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
2b910 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73  RSOR_HINTS.int s
2b920 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69  qlite3ExprContai
2b930 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a  nsSubquery(Expr*
2b940 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2b950 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
2b960 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
2b970 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2b980 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
2b990 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2b9a0 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
2b9b0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
2b9c0 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
2b9d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
2b9e0 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
2b9f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
2ba00 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
2ba10 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c  .    Parse*,Tabl
2ba20 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c  e*,Trigger*,int,
2ba30 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75  int,int,i16,u8,u
2ba40 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  8,u8,int);.void 
2ba50 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
2ba60 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
2ba70 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2ba80 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2ba90 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
2baa0 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
2bab0 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
2bac0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
2bad0 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
2bae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2baf0 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
2bb00 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
2bb10 74 20 73 71 6c 69 74 65 33 45 78 70 72 52 65 66  t sqlite3ExprRef
2bb20 65 72 65 6e 63 65 73 55 70 64 61 74 65 64 43 6f  erencesUpdatedCo
2bb30 6c 75 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c  lumn(Expr*,int*,
2bb40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2bb50 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72  e3GenerateConstr
2bb60 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65  aintChecks(Parse
2bb70 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e  *,Table*,int*,in
2bb80 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20  t,int,int,int,. 
2bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbb0 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e      u8,u8,int,in
2bbc0 74 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29  t*,int*,Upsert*)
2bbd0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2bbe0 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
2bbf0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53  .  void sqlite3S
2bc00 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56  etMakeRecordP5(V
2bc10 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  dbe*,Table*);.#e
2bc20 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2bc30 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72  ite3SetMakeRecor
2bc40 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  dP5(A,B).#endif.
2bc50 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
2bc60 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
2bc70 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
2bc80 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  int,int,int*,int
2bc90 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ,int,int);.int s
2bca0 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
2bcb0 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a  ndIndices(Parse*
2bcc0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75  , Table*, int, u
2bcd0 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74  8, int, u8*, int
2bce0 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  *, int*);.void s
2bcf0 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
2bd00 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a  Operation(Parse*
2bd10 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2bd20 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72  d sqlite3MultiWr
2bd30 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ite(Parse*);.voi
2bd40 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72  d sqlite3MayAbor
2bd50 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
2bd60 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74  sqlite3HaltConst
2bd70 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
2bd80 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69  t, int, char*, i
2bd90 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  8, u8);.void sql
2bda0 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72  ite3UniqueConstr
2bdb0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
2bdc0 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
2bdd0 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73  sqlite3RowidCons
2bde0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
2bdf0 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70  nt, Table*);.Exp
2be00 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75  r *sqlite3ExprDu
2be10 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  p(sqlite3*,Expr*
2be20 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20  ,int);.ExprList 
2be30 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
2be40 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
2be50 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63  rList*,int);.Src
2be60 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
2be70 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
2be80 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ,SrcList*,int);.
2be90 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
2bea0 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  dListDup(sqlite3
2beb0 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65  *,IdList*);.Sele
2bec0 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
2bed0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  tDup(sqlite3*,Se
2bee0 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  lect*,int);.Func
2bef0 44 65 66 20 2a 73 71 6c 69 74 65 33 46 75 6e 63  Def *sqlite3Func
2bf00 74 69 6f 6e 53 65 61 72 63 68 28 69 6e 74 2c 63  tionSearch(int,c
2bf10 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2bf20 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42  d sqlite3InsertB
2bf30 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63  uiltinFuncs(Func
2bf40 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44  Def*,int);.FuncD
2bf50 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
2bf60 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
2bf70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2bf80 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71  ,u8,u8);.void sq
2bf90 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69  lite3RegisterBui
2bfa0 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f  ltinFunctions(vo
2bfb0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
2bfc0 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d  3RegisterDateTim
2bfd0 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
2bfe0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2bff0 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74  gisterPerConnect
2c000 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  ionBuiltinFuncti
2c010 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ons(sqlite3*);.i
2c020 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
2c030 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
2c040 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
2c050 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
2c060 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
2c070 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
2c080 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
2c090 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
2c0a0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
2c0b0 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
2c0c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2c0d0 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
2c0e0 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
2c0f0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2c100 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
2c110 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65  *,Expr*,int);.#e
2c120 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2c130 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2c140 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
2c150 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
2c160 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
2c170 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
2c180 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
2c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1a0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
2c1b0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
2c1c0 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
2c1d0 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
2c1e0 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
2c1f0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2c200 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
2c210 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2c220 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
2c230 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
2c240 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
2c250 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
2c260 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
2c270 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
2c280 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
2c290 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
2c2a0 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
2c2b0 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
2c2c0 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
2c2d0 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
2c2e0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2c2f0 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
2c300 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
2c310 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
2c320 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2c340 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
2c350 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
2c360 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
2c370 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
2c380 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
2c390 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
2c3a0 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
2c3b0 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
2c3c0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
2c3d0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
2c3e0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2c3f0 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
2c400 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
2c410 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
2c420 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2c430 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
2c440 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
2c450 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c470 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2c480 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2c490 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ar*);.  TriggerS
2c4a0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2c4b0 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 50 61  gerInsertStep(Pa
2c4c0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  rse*,Token*, IdL
2c4d0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
2c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
2c500 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a  lect*,u8,Upsert*
2c510 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c530 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2c540 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2c550 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2c560 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2c570 72 55 70 64 61 74 65 53 74 65 70 28 50 61 72 73  rUpdateStep(Pars
2c580 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  e*,Token*,ExprLi
2c590 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a  st*, Expr*, u8,.
2c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5c0 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2c5d0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2c5e0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2c5f0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
2c600 65 6c 65 74 65 53 74 65 70 28 50 61 72 73 65 2a  eleteStep(Parse*
2c610 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a  ,Token*, Expr*,.
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c640 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2c650 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2c660 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c670 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
2c680 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
2c690 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2c6a0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2c6b0 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
2c6c0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
2c6d0 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
2c6e0 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
2c6f0 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
2c700 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
2c710 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
2c720 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
2c730 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
2c740 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
2c750 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
2c760 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20  : (p)).# define 
2c770 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65  sqlite3IsTopleve
2c780 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
2c790 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  evel==0).#else.#
2c7a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
2c7b0 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43  riggersExist(B,C
2c7c0 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69  ,D,E,F) 0.# defi
2c7d0 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  ne sqlite3Delete
2c7e0 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64  Trigger(A,B).# d
2c7f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f  efine sqlite3Dro
2c800 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29  pTriggerPtr(A,B)
2c810 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c820 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2c830 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23  Trigger(A,B,C).#
2c840 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2c850 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c  odeRowTrigger(A,
2c860 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29  B,C,D,E,F,G,H,I)
2c870 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c880 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
2c890 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  irect(A,B,C,D,E,
2c8a0 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  F).# define sqli
2c8b0 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58  te3TriggerList(X
2c8c0 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20  , Y) 0.# define 
2c8d0 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
2c8e0 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69  evel(p) p.# defi
2c8f0 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c  ne sqlite3IsTopl
2c900 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69  evel(p) 1.# defi
2c910 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
2c920 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44  rColmask(A,B,C,D
2c930 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66  ,E,F,G) 0.#endif
2c940 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69  ..int sqlite3Joi
2c950 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  nType(Parse*, To
2c960 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
2c970 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2c980 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e  te3CreateForeign
2c990 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
2c9a0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45  List*, Token*, E
2c9b0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
2c9c0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65  void sqlite3Defe
2c9d0 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  rForeignKey(Pars
2c9e0 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65  e*, int);.#ifnde
2c9f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
2ca00 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f  THORIZATION.  vo
2ca10 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  id sqlite3AuthRe
2ca20 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ad(Parse*,Expr*,
2ca30 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a  Schema*,SrcList*
2ca40 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2ca50 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a  AuthCheck(Parse*
2ca60 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  ,int, const char
2ca70 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2ca80 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2ca90 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
2caa0 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73  ContextPush(Pars
2cab0 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a  e*, AuthContext*
2cac0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2cad0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
2cae0 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74  thContextPop(Aut
2caf0 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e  hContext*);.  in
2cb00 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  t sqlite3AuthRea
2cb10 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e  dCol(Parse*, con
2cb20 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
2cb30 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23   char *, int);.#
2cb40 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2cb50 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c  lite3AuthRead(a,
2cb60 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20  b,c,d).# define 
2cb70 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
2cb80 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53  (a,b,c,d,e)    S
2cb90 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e  QLITE_OK.# defin
2cba0 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
2cbb0 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a  textPush(a,b,c).
2cbc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2cbd0 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61  AuthContextPop(a
2cbe0 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23  )  ((void)(a)).#
2cbf0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2cc00 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Attach(Parse*,
2cc10 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45   Expr*, Expr*, E
2cc20 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2cc30 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a  te3Detach(Parse*
2cc40 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2cc50 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62  qlite3FixInit(Db
2cc60 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20  Fixer*, Parse*, 
2cc70 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
2cc80 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
2cc90 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
2cca0 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  rcList(DbFixer*,
2ccb0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
2ccc0 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74  sqlite3FixSelect
2ccd0 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63  (DbFixer*, Selec
2cce0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2ccf0 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a  FixExpr(DbFixer*
2cd00 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
2cd10 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74  lite3FixExprList
2cd20 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c  (DbFixer*, ExprL
2cd30 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2cd40 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70  e3FixTriggerStep
2cd50 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67  (DbFixer*, Trigg
2cd60 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71  erStep*);.int sq
2cd70 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
2cd80 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a  char *z, double*
2cd90 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
2cda0 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
2cdb0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
2cdc0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2cdd0 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  Atoi(const char*
2cde0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2cdf0 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74  E_OMIT_UTF16.int
2ce00 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74   sqlite3Utf16Byt
2ce10 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20  eLen(const void 
2ce20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61  *pData, int nCha
2ce30 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  r);.#endif.int s
2ce40 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65  qlite3Utf8CharLe
2ce50 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44  n(const char *pD
2ce60 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b  ata, int nByte);
2ce70 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38  .u32 sqlite3Utf8
2ce80 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29  Read(const u8**)
2ce90 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
2cea0 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67  LogEst(u64);.Log
2ceb0 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
2cec0 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45  tAdd(LogEst,LogE
2ced0 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  st);.#ifndef SQL
2cee0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2cef0 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c  TABLE.LogEst sql
2cf00 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f  ite3LogEstFromDo
2cf10 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65  uble(double);.#e
2cf20 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2cf30 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
2cf40 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20  TMT_SCANSTATUS) 
2cf50 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
2cf60 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
2cf70 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c  TAT3_OR_STAT4) |
2cf80 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  | \.    defined(
2cf90 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45  SQLITE_EXPLAIN_E
2cfa0 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75  STIMATED_ROWS).u
2cfb0 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  64 sqlite3LogEst
2cfc0 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23  ToInt(LogEst);.#
2cfd0 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c  endif.VList *sql
2cfe0 69 74 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c  ite3VListAdd(sql
2cff0 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e  ite3*,VList*,con
2d000 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74  st char*,int,int
2d010 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
2d020 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f  qlite3VListNumTo
2d030 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29  Name(VList*,int)
2d040 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69  ;.int sqlite3VLi
2d050 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73  stNameToNum(VLis
2d060 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  t*,const char*,i
2d070 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74  nt);../*.** Rout
2d080 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64  ines to read and
2d090 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d   write variable-
2d0a0 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e  length integers.
2d0b0 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a    These used to.
2d0c0 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f  ** be defined lo
2d0d0 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77  cally, but now w
2d0e0 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74  e use the varint
2d0f0 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65   routines in the
2d100 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e   util.c.** file.
2d110 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  .*/.int sqlite3P
2d120 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65  utVarint(unsigne
2d130 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75  d char*, u64);.u
2d140 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
2d150 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  nt(const unsigne
2d160 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29  d char *, u64 *)
2d170 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
2d180 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e  arint32(const un
2d190 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
2d1a0 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  32 *);.int sqlit
2d1b0 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20  e3VarintLen(u64 
2d1c0 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  v);../*.** The c
2d1d0 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f  ommon case is fo
2d1e0 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65  r a varint to be
2d1f0 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20   a single byte. 
2d200 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a   They following.
2d210 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65  ** macros handle
2d220 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   the common case
2d230 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65   without a proce
2d240 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74  dure call, but t
2d250 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20  hen call.** the 
2d260 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61  procedure for la
2d270 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f  rger varints..*/
2d280 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
2d290 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
2d2a0 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78  u8)((*(A)<(u8)0x
2d2b0 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28  80)?((B)=(u32)*(
2d2c0 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74  A)),1:sqlite3Get
2d2d0 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33  Varint32((A),(u3
2d2e0 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69  2 *)&(B))).#defi
2d2f0 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41  ne putVarint32(A
2d300 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28  ,B)  \.  (u8)(((
2d310 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38  u32)(B)<(u32)0x8
2d320 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e  0)?(*(A)=(unsign
2d330 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c  ed char)(B)),1:\
2d340 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  .  sqlite3PutVar
2d350 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64  int((A),(B))).#d
2d360 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20  efine getVarint 
2d370 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72     sqlite3GetVar
2d380 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56  int.#define putV
2d390 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
2d3a0 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73  PutVarint...cons
2d3b0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49  t char *sqlite3I
2d3c0 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
2d3d0 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
2d3e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
2d3f0 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62  ableAffinity(Vdb
2d400 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
2d410 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
2d420 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
2d430 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
2d440 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
2d450 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
2d460 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
2d470 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
2d480 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54  );.char sqlite3T
2d490 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  ableColumnAffini
2d4a0 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  ty(Table*,int);.
2d4b0 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
2d4c0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
2d4d0 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
2d4e0 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
2d4f0 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
2d500 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2d510 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63  3DecOrHexToI64(c
2d520 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
2d530 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2d540 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69  rrorWithMsg(sqli
2d550 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2d560 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
2d570 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
2d580 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
2d590 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d  id sqlite3System
2d5a0 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69  Error(sqlite3*,i
2d5b0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
2d5c0 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69  e3HexToBlob(sqli
2d5d0 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
2d5e0 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20   *z, int n);.u8 
2d5f0 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
2d600 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69  int h);.int sqli
2d610 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50  te3TwoPartName(P
2d620 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  arse *, Token *,
2d630 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
2d640 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  **);..#if define
2d650 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52  d(SQLITE_NEED_ER
2d660 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68  R_NAME).const ch
2d670 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
2d680 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
2d690 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2d6a0 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a  NABLE_DESERIALIZ
2d6b0 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d  E.int sqlite3Mem
2d6c0 64 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65  dbInit(void);.#e
2d6d0 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72  ndif..const char
2d6e0 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28   *sqlite3ErrStr(
2d6f0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2d700 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73  3ReadSchema(Pars
2d710 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c  e *pParse);.Coll
2d720 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Seq *sqlite3Find
2d730 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a  CollSeq(sqlite3*
2d740 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63  ,u8 enc, const c
2d750 68 61 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  har*,int);.int s
2d760 71 6c 69 74 65 33 49 73 42 69 6e 61 72 79 28 63  qlite3IsBinary(c
2d770 6f 6e 73 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a  onst CollSeq*);.
2d780 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2d790 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61  LocateCollSeq(Pa
2d7a0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
2d7b0 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a  st char*zName);.
2d7c0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2d7d0 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73  ExprCollSeq(Pars
2d7e0 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2d7f0 2a 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71  *pExpr);.CollSeq
2d800 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43   *sqlite3ExprNNC
2d810 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2d820 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70  arse, Expr *pExp
2d830 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  r);.int sqlite3E
2d840 78 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28  xprCollSeqMatch(
2d850 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70  Parse*,Expr*,Exp
2d860 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
2d870 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
2d880 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61  Token(Parse *pPa
2d890 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  rse, Expr*, cons
2d8a0 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  t Token*, int);.
2d8b0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2d8c0 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e  rAddCollateStrin
2d8d0 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  g(Parse*,Expr*,c
2d8e0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70  onst char*);.Exp
2d8f0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b  r *sqlite3ExprSk
2d900 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29  ipCollate(Expr*)
2d910 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
2d920 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
2d930 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
2d940 6e 74 20 73 71 6c 69 74 65 33 57 72 69 74 61 62  nt sqlite3Writab
2d950 6c 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  leSchema(sqlite3
2d960 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2d970 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
2d980 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
2d990 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
2d9a0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
2d9b0 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
2d9c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
2d9d0 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
2d9e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
2d9f0 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2da00 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
2da10 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2da20 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
2da30 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
2da40 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
2da50 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
2da60 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2da70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
2da80 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
2da90 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
2daa0 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
2dab0 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
2dac0 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
2dad0 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
2dae0 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
2daf0 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
2db00 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
2db10 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
2db20 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
2db30 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
2db40 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
2db50 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
2db60 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
2db70 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20  d *,u8,.        
2db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db90 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
2dba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2dbb0 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65  ueSetNull(sqlite
2dbc0 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20  3_value*);.void 
2dbd0 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
2dbe0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2dbf0 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  ;.sqlite3_value 
2dc00 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77  *sqlite3ValueNew
2dc10 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66  (sqlite3 *);.#if
2dc20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2dc30 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c  _UTF16.char *sql
2dc40 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c  ite3Utf16to8(sql
2dc50 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f  ite3 *, const vo
2dc60 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  id*, int, u8);.#
2dc70 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2dc80 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73  3ValueFromExpr(s
2dc90 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a  qlite3 *, Expr *
2dca0 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
2dcb0 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
2dcc0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
2dcd0 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
2dce0 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
2dcf0 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
2dd00 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
2dd10 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  N.extern const u
2dd20 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
2dd30 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
2dd40 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ty[];.extern con
2dd50 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 53  st char sqlite3S
2dd60 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65  trBINARY[];.exte
2dd70 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2dd80 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
2dd90 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
2dda0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2ddb0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2ddc0 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
2ddd0 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
2dde0 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
2ddf0 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
2de00 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
2de10 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
2de20 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
2de30 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
2de40 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
2de50 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ons;.#ifndef SQL
2de60 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74  ITE_OMIT_WSD.ext
2de70 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ern int sqlite3P
2de80 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64  endingByte;.#end
2de90 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  if.#endif.#ifdef
2dea0 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 65 78   VDBE_PROFILE.ex
2deb0 74 65 72 6e 20 73 71 6c 69 74 65 33 5f 75 69 6e  tern sqlite3_uin
2dec0 74 36 34 20 73 71 6c 69 74 65 33 4e 50 72 6f 66  t64 sqlite3NProf
2ded0 69 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 76  ileCnt;.#endif.v
2dee0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50  oid sqlite3RootP
2def0 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33  ageMoved(sqlite3
2df00 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2df10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2df20 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54  eindex(Parse*, T
2df30 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
2df40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2df50 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  rFunctions(void)
2df60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2df70 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50  terRenameTable(P
2df80 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2df90 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2dfa0 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
2dfb0 65 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20  eColumn(Parse*, 
2dfc0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
2dfd0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2dfe0 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
2dff0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2e000 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
2e010 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
2e020 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
2e030 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
2e040 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2e050 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
2e060 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 2c 20  ments(sqlite3*, 
2e070 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2e080 65 33 43 6f 64 65 52 68 73 4f 66 49 4e 28 50 61  e3CodeRhsOfIN(Pa
2e090 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2e0a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
2e0b0 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73  deSubselect(Pars
2e0c0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
2e0d0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72   sqlite3SelectPr
2e0e0 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ep(Parse*, Selec
2e0f0 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
2e100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2e110 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72  electWrongNumTer
2e120 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70  msError(Parse *p
2e130 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70  Parse, Select *p
2e140 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
2e150 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73  tchSpanName(cons
2e160 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2e170 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2e180 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2e190 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
2e1a0 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d  lveExprNames(Nam
2e1b0 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
2e1c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2e1d0 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d  solveExprListNam
2e1e0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
2e1f0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69   ExprList*);.voi
2e200 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
2e210 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
2e220 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
2e230 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20  eContext*);.int 
2e240 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
2e250 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73  lfReference(Pars
2e260 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78  e*,Table*,int,Ex
2e270 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  pr*,ExprList*);.
2e280 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2e290 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
2e2a0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2e2b0 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
2e2c0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2e2d0 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
2e2e0 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
2e2f0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
2e300 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2e310 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
2e320 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
2e330 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2e340 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
2e350 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
2e360 69 73 74 20 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  ist *);.void *sq
2e370 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e  lite3RenameToken
2e380 4d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64  Map(Parse*, void
2e390 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2e3a0 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f   sqlite3RenameTo
2e3b0 6b 65 6e 52 65 6d 61 70 28 50 61 72 73 65 2a 2c  kenRemap(Parse*,
2e3c0 20 76 6f 69 64 20 2a 70 54 6f 2c 20 76 6f 69 64   void *pTo, void
2e3d0 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f 69 64 20 73   *pFrom);.void s
2e3e0 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72  qlite3RenameExpr
2e3f0 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20 45 78  Unmap(Parse*, Ex
2e400 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2e410 65 33 52 65 6e 61 6d 65 45 78 70 72 6c 69 73 74  e3RenameExprlist
2e420 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20 45 78  Unmap(Parse*, Ex
2e430 70 72 4c 69 73 74 2a 29 3b 0a 43 6f 6c 6c 53 65  prList*);.CollSe
2e440 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c  q *sqlite3GetCol
2e450 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c  lSeq(Parse*, u8,
2e460 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73   CollSeq *, cons
2e470 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73  t char*);.char s
2e480 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79  qlite3AffinityTy
2e490 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  pe(const char*, 
2e4a0 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20 73  Column*);.void s
2e4b0 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61  qlite3Analyze(Pa
2e4c0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2e4d0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2e4e0 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
2e4f0 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a  ler(BusyHandler*
2e500 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 29  , sqlite3_file*)
2e510 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
2e520 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  dDb(sqlite3*, To
2e530 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2e540 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c  e3FindDbName(sql
2e550 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
2e560 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
2e570 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73  e3AnalysisLoad(s
2e580 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29  qlite3*,int iDB)
2e590 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2e5a0 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73  leteIndexSamples
2e5b0 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a  (sqlite3*,Index*
2e5c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2e5d0 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64  efaultRowEst(Ind
2e5e0 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
2e5f0 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
2e600 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
2e610 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2e620 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f  te3IsLikeFunctio
2e630 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  n(sqlite3*,Expr*
2e640 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f  ,int*,char*);.vo
2e650 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  id sqlite3Schema
2e660 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53  Clear(void *);.S
2e670 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63  chema *sqlite3Sc
2e680 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20  hemaGet(sqlite3 
2e690 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74  *, Btree *);.int
2e6a0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f   sqlite3SchemaTo
2e6b0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64  Index(sqlite3 *d
2e6c0 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65  b, Schema *);.Ke
2e6d0 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
2e6e0 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74  yInfoAlloc(sqlit
2e6f0 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  e3*,int,int);.vo
2e700 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  id sqlite3KeyInf
2e710 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29  oUnref(KeyInfo*)
2e720 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2e730 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79  e3KeyInfoRef(Key
2e740 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
2e750 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f  *sqlite3KeyInfoO
2e760 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49  fIndex(Parse*, I
2e770 6e 64 65 78 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  ndex*);.KeyInfo 
2e780 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 46  *sqlite3KeyInfoF
2e790 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73  romExprList(Pars
2e7a0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
2e7b0 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 64 65  nt, int);..#ifde
2e7c0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69  f SQLITE_DEBUG.i
2e7d0 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  nt sqlite3KeyInf
2e7e0 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79  oIsWriteable(Key
2e7f0 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Info*);.#endif.i
2e800 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  nt sqlite3Create
2e810 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  Func(sqlite3 *, 
2e820 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
2e830 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a  t, int, void *,.
2e840 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2e850 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2e860 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2e870 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
2e880 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
2e890 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
2e8a0 20 2a 2a 29 2c 20 0a 20 20 76 6f 69 64 20 28 2a   **), .  void (*
2e8b0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2e8c0 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  t*),.  void (*)(
2e8d0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2e8e0 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
2e8f0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
2e900 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
2e910 20 2a 2a 29 2c 20 0a 20 20 46 75 6e 63 44 65 73   **), .  FuncDes
2e920 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
2e930 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c  ctor.);.void sql
2e940 69 74 65 33 4e 6f 6f 70 44 65 73 74 72 75 63 74  ite3NoopDestruct
2e950 6f 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  or(void*);.void 
2e960 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28  sqlite3OomFault(
2e970 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2e980 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28  sqlite3OomClear(
2e990 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2e9a0 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71  qlite3ApiExit(sq
2e9b0 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b  lite3 *db, int);
2e9c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
2e9d0 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72  TempDatabase(Par
2e9e0 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  se *);..void sql
2e9f0 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
2ea00 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69  (StrAccum*, sqli
2ea10 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74  te3*, char*, int
2ea20 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  , int);.char *sq
2ea30 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
2ea40 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  ish(StrAccum*);.
2ea50 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2ea60 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63  ctDestInit(Selec
2ea70 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  tDest*,int,int);
2ea80 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72  .Expr *sqlite3Cr
2ea90 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73  eateColumnExpr(s
2eaa0 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73  qlite3 *, SrcLis
2eab0 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  t *, int, int);.
2eac0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
2ead0 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74  kupRestart(sqlit
2eae0 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f  e3_backup *);.vo
2eaf0 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
2eb00 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62  Update(sqlite3_b
2eb10 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63  ackup *, Pgno, c
2eb20 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66  onst u8 *);..#if
2eb30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2eb40 5f 53 55 42 51 55 45 52 59 0a 69 6e 74 20 73 71  _SUBQUERY.int sq
2eb50 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e  lite3ExprCheckIN
2eb60 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
2eb70 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2eb80 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2eb90 49 4e 28 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f  IN(x,y) SQLITE_O
2eba0 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  K.#endif..#ifdef
2ebb0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
2ebc0 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
2ebd0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
2ebe0 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
2ebf0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
2ec00 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
2ec10 0a 20 20 20 20 50 61 72 73 65 2a 2c 49 6e 64 65  .    Parse*,Inde
2ec20 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  x*,UnpackedRecor
2ec30 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e  d**,Expr*,int,in
2ec40 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  t,int*);.int sql
2ec50 69 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72  ite3Stat4ValueFr
2ec60 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45  omExpr(Parse*, E
2ec70 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65  xpr*, u8, sqlite
2ec80 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64  3_value**);.void
2ec90 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
2eca0 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52  beFree(UnpackedR
2ecb0 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  ecord*);.int sql
2ecc0 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28  ite3Stat4Column(
2ecd0 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
2ece0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  void*, int, int,
2ecf0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
2ed00 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 49  );.char sqlite3I
2ed10 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  ndexColumnAffini
2ed20 74 79 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64  ty(sqlite3*, Ind
2ed30 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  ex*, int);.#endi
2ed40 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  f../*.** The int
2ed50 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45  erface to the LE
2ed60 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61  MON-generated pa
2ed70 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  rser.*/.#ifndef 
2ed80 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
2ed90 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  ION.  void *sqli
2eda0 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76  te3ParserAlloc(v
2edb0 6f 69 64 2a 28 2a 29 28 75 36 34 29 2c 20 50 61  oid*(*)(u64), Pa
2edc0 72 73 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  rse*);.  void sq
2edd0 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28  lite3ParserFree(
2ede0 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76  void*, void(*)(v
2edf0 6f 69 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76  oid*));.#endif.v
2ee00 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2ee10 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f  r(void*, int, To
2ee20 6b 65 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ken);.int sqlite
2ee30 33 50 61 72 73 65 72 46 61 6c 6c 62 61 63 6b 28  3ParserFallback(
2ee40 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 59 59 54  int);.#ifdef YYT
2ee50 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
2ee60 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
2ee70 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
2ee80 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
2ee90 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
2eea0 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
2eeb0 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
2eec0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
2eed0 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
2eee0 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
2eef0 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
2ef00 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
2ef10 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
2ef20 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
2ef30 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2ef40 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
2ef50 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
2ef60 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
2ef70 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
2ef80 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
2ef90 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
2efa0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
2efb0 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
2efc0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2efd0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
2efe0 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
2eff0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
2f000 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
2f010 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2f020 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
2f030 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
2f040 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
2f050 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
2f060 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
2f070 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2f080 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
2f090 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2f0a0 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
2f0b0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2f0c0 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
2f0d0 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
2f0e0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a  ite3VtabLock(X).
2f0f0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2f100 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23  3VtabUnlock(X).#
2f110 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2f120 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58  VtabUnlockList(X
2f130 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2f140 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
2f150 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45  (X, Y, Z) SQLITE
2f160 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
2f170 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58  lite3GetVTable(X
2f180 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30  ,Y)  ((VTable*)0
2f190 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20  ).#else.   void 
2f1a0 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
2f1b0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
2f1c0 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  ble*);.   void s
2f1d0 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e  qlite3VtabDiscon
2f1e0 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62  nect(sqlite3 *db
2f1f0 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20  , Table *p);.   
2f200 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
2f210 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ync(sqlite3 *db,
2f220 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20   Vdbe*);.   int 
2f230 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
2f240 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ack(sqlite3 *db)
2f250 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
2f260 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74  VtabCommit(sqlit
2f270 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64  e3 *db);.   void
2f280 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
2f290 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
2f2a0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
2f2b0 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  nlock(VTable *);
2f2c0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2f2d0 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73  VtabUnlockList(s
2f2e0 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74  qlite3*);.   int
2f2f0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
2f300 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c  point(sqlite3 *,
2f310 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76   int, int);.   v
2f320 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49  oid sqlite3VtabI
2f330 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65  mportErrmsg(Vdbe
2f340 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  *, sqlite3_vtab*
2f350 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71  );.   VTable *sq
2f360 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73  lite3GetVTable(s
2f370 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
2f380 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c  ;.   Module *sql
2f390 69 74 65 33 56 74 61 62 43 72 65 61 74 65 4d 6f  ite3VtabCreateMo
2f3a0 64 75 6c 65 28 0a 20 20 20 20 20 73 71 6c 69 74  dule(.     sqlit
2f3b0 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20  e3*,.     const 
2f3c0 63 68 61 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73  char*,.     cons
2f3d0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
2f3e0 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20  *,.     void*,. 
2f3f0 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
2f400 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64 65 66 69  *).   );.#  defi
2f410 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
2f420 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e  Sync(db) ((db)->
2f430 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62  nVTrans>0 && (db
2f440 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23  )->aVTrans==0).#
2f450 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2f460 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
2f470 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d  bleInit(Parse*,M
2f480 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  odule*);.void sq
2f490 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
2f4a0 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c  usTableClear(sql
2f4b0 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a  ite3*,Module*);.
2f4c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2f4d0 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
2f4e0 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
2f4f0 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
2f500 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
2f510 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
2f520 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
2f530 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
2f540 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
2f550 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2f560 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
2f570 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
2f580 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
2f590 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
2f5a0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2f5b0 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
2f5c0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2f5d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
2f5e0 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
2f5f0 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
2f600 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
2f610 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2f620 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
2f630 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
2f640 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
2f650 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
2f660 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61  n(sqlite3 *, VTa
2f670 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20  ble *);.FuncDef 
2f680 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72  *sqlite3VtabOver
2f690 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  loadFunction(sql
2f6a0 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c  ite3 *,FuncDef*,
2f6b0 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a   int nArg, Expr*
2f6c0 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
2f6d0 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
2f6e0 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
2f6f0 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
2f700 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
2f710 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
2f720 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
2f730 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
2f740 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
2f750 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
2f760 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
2f770 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2f780 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
2f790 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2f7a0 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a  NABLE_NORMALIZE.
2f7b0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 6f 72  char *sqlite3Nor
2f7c0 6d 61 6c 69 7a 65 28 56 64 62 65 2a 2c 20 63 6f  malize(Vdbe*, co
2f7d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
2f7e0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  if.int sqlite3Re
2f7f0 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a  prepare(Vdbe*);.
2f800 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2f810 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28  ListCheckLength(
2f820 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2f830 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2f840 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2f850 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f  3BinaryCompareCo
2f860 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45  llSeq(Parse *, E
2f870 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a  xpr *, Expr *);.
2f880 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49  int sqlite3TempI
2f890 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71  nMemory(const sq
2f8a0 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63  lite3*);.const c
2f8b0 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
2f8c0 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29  nalModename(int)
2f8d0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2f8e0 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
2f8f0 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
2f900 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  t(sqlite3*, int,
2f910 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   int, int*, int*
2f920 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2f930 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76  WalDefaultHook(v
2f940 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
2f950 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2f960 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
2f970 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20  QLITE_OMIT_CTE. 
2f980 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69   With *sqlite3Wi
2f990 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74  thAdd(Parse*,Wit
2f9a0 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  h*,Token*,ExprLi
2f9b0 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  st*,Select*);.  
2f9c0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
2f9d0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
2f9e0 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73  With*);.  void s
2f9f0 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 50  qlite3WithPush(P
2fa00 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38  arse*, With*, u8
2fa10 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  );.#else.#define
2fa20 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
2fa30 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20  (x,y,z).#define 
2fa40 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
2fa50 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 23 69  e(x,y).#endif.#i
2fa60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2fa70 54 5f 55 50 53 45 52 54 0a 20 20 55 70 73 65 72  T_UPSERT.  Upser
2fa80 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74  t *sqlite3Upsert
2fa90 4e 65 77 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  New(sqlite3*,Exp
2faa0 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  rList*,Expr*,Exp
2fab0 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 20  rList*,Expr*);. 
2fac0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 73   void sqlite3Ups
2fad0 65 72 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ertDelete(sqlite
2fae0 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 55  3*,Upsert*);.  U
2faf0 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70  psert *sqlite3Up
2fb00 73 65 72 74 44 75 70 28 73 71 6c 69 74 65 33 2a  sertDup(sqlite3*
2fb10 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 69 6e 74  ,Upsert*);.  int
2fb20 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 41 6e   sqlite3UpsertAn
2fb30 61 6c 79 7a 65 54 61 72 67 65 74 28 50 61 72 73  alyzeTarget(Pars
2fb40 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 55 70 73 65  e*,SrcList*,Upse
2fb50 72 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rt*);.  void sql
2fb60 69 74 65 33 55 70 73 65 72 74 44 6f 55 70 64 61  ite3UpsertDoUpda
2fb70 74 65 28 50 61 72 73 65 2a 2c 55 70 73 65 72 74  te(Parse*,Upsert
2fb80 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c  *,Table*,Index*,
2fb90 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66  int);.#else.#def
2fba0 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72  ine sqlite3Upser
2fbb0 74 4e 65 77 28 76 2c 77 2c 78 2c 79 2c 7a 29 20  tNew(v,w,x,y,z) 
2fbc0 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23 64 65  ((Upsert*)0).#de
2fbd0 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65  fine sqlite3Upse
2fbe0 72 74 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 64  rtDelete(x,y).#d
2fbf0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73  efine sqlite3Ups
2fc00 65 72 74 44 75 70 28 78 2c 79 29 20 20 20 20 20  ertDup(x,y)     
2fc10 20 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23    ((Upsert*)0).#
2fc20 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61  endif.../* Decla
2fc30 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63  rations for func
2fc40 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e  tions in fkey.c.
2fc50 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72   All of these ar
2fc60 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a  e replaced by.**
2fc70 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66   no-op macros if
2fc80 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
2fc90 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e  Y is defined. In
2fca0 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f   this case no fo
2fcb0 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e  reign.** key fun
2fcc0 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76  ctionality is av
2fcd0 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54  ailable. If OMIT
2fce0 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69  _TRIGGER is defi
2fcf0 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f  ned but.** OMIT_
2fd00 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e  FOREIGN_KEY is n
2fd10 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66  ot, only some of
2fd20 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61   the functions a
2fd30 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a  re no-oped. In.*
2fd40 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65  * this case fore
2fd50 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72  ign keys are par
2fd60 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65  sed, but no othe
2fd70 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  r functionality 
2fd80 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28  is.** provided (
2fd90 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46  enforcement of F
2fda0 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65  K constraints re
2fdb0 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67  quires the trigg
2fdc0 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e  ers sub-system).
2fdd0 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2fde0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
2fdf0 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65  EIGN_KEY) && !de
2fe00 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2fe10 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69  T_TRIGGER).  voi
2fe20 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  d sqlite3FkCheck
2fe30 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2fe40 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
2fe50 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2fe60 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
2fe70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2fe80 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76   *, Table*);.  v
2fe90 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74  oid sqlite3FkAct
2fea0 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ions(Parse*, Tab
2feb0 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  le*, ExprList*, 
2fec0 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
2fed0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
2fee0 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c  Required(Parse*,
2fef0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69   Table*, int*, i
2ff00 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  nt);.  u32 sqlit
2ff10 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73  e3FkOldmask(Pars
2ff20 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46  e*, Table*);.  F
2ff30 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65  Key *sqlite3FkRe
2ff40 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a  ferences(Table *
2ff50 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2ff60 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  ne sqlite3FkActi
2ff70 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  ons(a,b,c,d,e,f)
2ff80 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2ff90 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c  e3FkCheck(a,b,c,
2ffa0 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
2ffb0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
2ffc0 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
2ffd0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
2ffe0 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
2fff0 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73     0.  #define s
30000 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
30010 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 20  (a,b,c,d)    0. 
30020 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30030 46 6b 52 65 66 65 72 65 6e 63 65 73 28 61 29 20  FkReferences(a) 
30040 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a         0.#endif.
30050 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30060 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
30070 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
30080 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
30090 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74  , Table*);.  int
300a0 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
300b0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62  Index(Parse*,Tab
300c0 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a  le*,FKey*,Index*
300d0 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a  *,int**);.#else.
300e0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
300f0 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20  3FkDelete(a,b). 
30100 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30110 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c  FkLocateIndex(a,
30120 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a  b,c,d,e).#endif.
30130 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c  ../*.** Availabl
30140 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72  e fault injector
30150 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75  s.  Should be nu
30160 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67  mbered beginning
30170 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66   with 0..*/.#def
30180 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
30190 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20  INJECTOR_MALLOC 
301a0 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51      0.#define SQ
301b0 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
301c0 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a  OR_COUNT      1.
301d0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
301e0 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65  face to the code
301f0 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64   in fault.c used
30200 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67   for identifying
30210 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c   "benign".** mal
30220 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68  loc failures. Th
30230 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65  is is only prese
30240 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 55 4e 54  nt if SQLITE_UNT
30250 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f  ESTABLE.** is no
30260 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69  t defined..*/.#i
30270 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
30280 45 53 54 41 42 4c 45 0a 20 20 76 6f 69 64 20 73  ESTABLE.  void s
30290 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
302a0 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20  nMalloc(void);. 
302b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64   void sqlite3End
302c0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
302d0 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  d);.#else.  #def
302e0 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e  ine sqlite3Begin
302f0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20  BenignMalloc(). 
30300 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30310 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
30320 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
30330 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
30340 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
30350 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a  e3FindInIndex().
30360 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
30370 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20  DEX_ROWID       
30380 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74   1   /* Search t
30390 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
303a0 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
303b0 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20   IN_INDEX_EPH   
303c0 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65         2   /* Se
303d0 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61  arch an ephemera
303e0 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66  l b-tree */.#def
303f0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
30400 45 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a  EX_ASC    3   /*
30410 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20   Existing index 
30420 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ASCENDING */.#de
30430 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
30440 44 45 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f  DEX_DESC   4   /
30450 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78  * Existing index
30460 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23   DESCENDING */.#
30470 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
30480 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20 20  NOOP         5  
30490 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61   /* No table ava
304a0 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70  ilable. Use comp
304b0 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a  arisons */./*.**
304c0 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66   Allowed flags f
304d0 6f 72 20 74 68 65 20 33 72 64 20 70 61 72 61 6d  or the 3rd param
304e0 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46  eter to sqlite3F
304f0 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f  indInIndex()..*/
30500 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
30510 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78  X_NOOP_OK     0x
30520 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72  0001  /* OK to r
30530 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e  eturn IN_INDEX_N
30540 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  OOP */.#define I
30550 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48  N_INDEX_MEMBERSH
30560 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49  IP  0x0002  /* I
30570 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20  N operator used 
30580 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74  for membership t
30590 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  est */.#define I
305a0 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20  N_INDEX_LOOP    
305b0 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49      0x0004  /* I
305c0 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20  N operator used 
305d0 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74  as a loop */.int
305e0 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
305f0 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70  dex(Parse *, Exp
30600 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20  r *, u32, int*, 
30610 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e  int*, int*);..in
30620 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
30630 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
30640 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
30650 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  , sqlite3_file *
30660 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
30670 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
30680 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ize(sqlite3_vfs 
30690 2a 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  *);.#if defined(
306a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54  SQLITE_ENABLE_AT
306b0 4f 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c  OMIC_WRITE) \. |
306c0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
306d0 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54  _ENABLE_BATCH_AT
306e0 4f 4d 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e  OMIC_WRITE).  in
306f0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
30700 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66  Create(sqlite3_f
30710 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ile *);.#endif..
30720 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
30730 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c  alIsInMemory(sql
30740 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76  ite3_file *p);.v
30750 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  oid sqlite3MemJo
30760 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
30770 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64  3_file *);..void
30780 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48   sqlite3ExprSetH
30790 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61  eightAndFlags(Pa
307a0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
307b0 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54  r *p);.#if SQLIT
307c0 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
307d0 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  >0.  int sqlite3
307e0 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
307f0 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
30800 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
30810 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
30820 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
30830 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
30840 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78  lectExprHeight(x
30850 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) 0.  #define sq
30860 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
30870 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66  ight(x,y).#endif
30880 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74  ..u32 sqlite3Get
30890 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29  4byte(const u8*)
308a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75  ;.void sqlite3Pu
308b0 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29  t4byte(u8*, u32)
308c0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
308d0 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
308e0 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c  OTIFY.  void sql
308f0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
30900 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c  ocked(sqlite3 *,
30910 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76   sqlite3 *);.  v
30920 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
30930 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71  ctionUnlocked(sq
30940 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f  lite3 *db);.  vo
30950 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
30960 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74  tionClosed(sqlit
30970 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20  e3 *db);.#else. 
30980 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30990 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
309a0 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  d(x,y).  #define
309b0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
309c0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20  onUnlocked(x).  
309d0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
309e0 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
309f0 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  x).#endif..#ifde
30a00 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
30a10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
30a20 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20  serTrace(FILE*, 
30a30 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  char *);.#endif.
30a40 23 69 66 20 64 65 66 69 6e 65 64 28 59 59 43 4f  #if defined(YYCO
30a50 56 45 52 41 47 45 29 0a 20 20 69 6e 74 20 73 71  VERAGE).  int sq
30a60 6c 69 74 65 33 50 61 72 73 65 72 43 6f 76 65 72  lite3ParserCover
30a70 61 67 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64  age(FILE*);.#end
30a80 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65  if../*.** If the
30a90 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49   SQLITE_ENABLE I
30aa0 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68  OTRACE exists th
30ab0 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  en the global va
30ac0 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65  riable.** sqlite
30ad0 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f  3IoTrace is a po
30ae0 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74  inter to a print
30af0 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75  f-like routine u
30b00 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20  sed to.** print 
30b10 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73  I/O tracing mess
30b20 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ages..*/.#ifdef 
30b30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
30b40 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
30b50 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
30b60 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
30b70 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
30b80 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
30b90 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
30ba0 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
30bb0 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45  _API SQLITE_EXTE
30bc0 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f  RN void (SQLITE_
30bd0 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f  CDECL *sqlite3Io
30be0 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
30bf0 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23  r*,...);.#else.#
30c00 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
30c10 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  A).# define sqli
30c20 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
30c30 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
30c40 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65  ** These routine
30c50 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
30c60 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64  for the mem2.c d
30c70 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20  ebugging memory 
30c80 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c  allocator.** onl
30c90 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  y.  They are use
30ca0 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
30cb0 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65   different "type
30cc0 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  s" of memory.** 
30cd0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
30ce0 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64  properly tracked
30cf0 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a   by the system..
30d00 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
30d10 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73  debugSetType() s
30d20 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f  ets the "type" o
30d30 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
30d40 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65  to one of.** the
30d50 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f   MEMTYPE_* macro
30d60 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e  s defined below.
30d70 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20    The type must 
30d80 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74  be a bitmask wit
30d90 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69  h.** a single bi
30da0 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  t set..**.** sql
30db0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
30dc0 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
30dd0 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  ue if any of the
30de0 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
30df0 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
30e00 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
30e10 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
30e20 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
30e30 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20  ugSetType()..** 
30e40 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
30e50 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65  asType() is inte
30e60 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73  nded for use ins
30e70 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61  ide assert() sta
30e80 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73  tements..**.** s
30e90 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
30ea0 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
30eb0 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  rue if none of t
30ec0 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
30ed0 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
30ee0 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
30ef0 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
30f00 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
30f10 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
30f20 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65  *.** Perhaps the
30f30 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20   most important 
30f40 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66  point is the dif
30f50 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
30f60 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20  MEMTYPE_HEAP.** 
30f70 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  and MEMTYPE_LOOK
30f80 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c  ASIDE.  If an al
30f90 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54  location is MEMT
30fa0 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74  YPE_LOOKASIDE, t
30fb0 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20  hat means.** it 
30fc0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
30fd0 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f  allocated by loo
30fe0 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74  kaside, except t
30ff0 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61  he allocation wa
31000 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f  s.** too large o
31010 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20  r lookaside was 
31020 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49  already full.  I
31030 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
31040 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74  o verify.** that
31050 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61   allocations tha
31060 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
31070 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c  n satisfied by l
31080 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74  ookaside are not
31090 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20  .** passed back 
310a0 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  to non-lookaside
310b0 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
310c0 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20  .  Asserts such 
310d0 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c  as the.** exampl
310e0 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63  e above are plac
310f0 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f  ed on the non-lo
31100 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
31110 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66  outines to verif
31120 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72  y.** this constr
31130 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  aint..**.** All 
31140 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70  of this is no-op
31150 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f   for a productio
31160 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c  n build.  It onl
31170 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20  y comes into.** 
31180 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51  play when the SQ
31190 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f  LITE_MEMDEBUG co
311a0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
311b0 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69  n is used..*/.#i
311c0 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
311d0 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
311e0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
311f0 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
31200 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
31210 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a  bugHasType(void*
31220 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
31230 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
31240 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c  e(void*,u8);.#el
31250 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
31260 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
31270 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f  pe(X,Y)  /* no-o
31280 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71  p */.# define sq
31290 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
312a0 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64  Type(X,Y)  1.# d
312b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
312c0 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29  debugNoType(X,Y)
312d0 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66     1.#endif.#def
312e0 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  ine MEMTYPE_HEAP
312f0 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
31300 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c  General heap all
31310 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
31320 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  ine MEMTYPE_LOOK
31330 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20  ASIDE  0x02  /* 
31340 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20  Heap that might 
31350 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73  have been lookas
31360 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ide */.#define M
31370 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20  EMTYPE_PCACHE   
31380 20 20 30 78 30 34 20 20 2f 2a 20 50 61 67 65 20    0x04  /* Page 
31390 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  cache allocation
313a0 73 20 2a 2f 0a 0a 23 69 66 20 28 53 51 4c 49 54  s */..#if (SQLIT
313b0 45 5f 45 4e 41 42 4c 45 5f 41 50 50 4c 45 5f 53  E_ENABLE_APPLE_S
313c0 50 49 3e 30 29 20 26 26 20 64 65 66 69 6e 65 64  PI>0) && defined
313d0 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 0a 2f 2a 0a  (__APPLE__)../*.
313e0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
313f0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
31400 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
31410 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 70 72  d to hold the pr
31420 6f 63 65 73 73 20 49 44 0a 2a 2a 20 61 6e 64 20  ocess ID.** and 
31430 72 65 74 75 72 6e 2d 62 79 2d 72 65 66 65 72 65  return-by-refere
31440 6e 63 65 20 6c 6f 63 6b 73 74 61 74 65 20 76 61  nce lockstate va
31450 6c 75 65 2e 20 20 54 68 65 20 53 51 4c 49 54 45  lue.  The SQLITE
31460 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45  _FCNTL_LOCKSTATE
31470 5f 50 49 44 0a 2a 2a 20 72 65 71 75 69 72 65 73  _PID.** requires
31480 20 74 68 65 20 34 74 68 20 61 72 67 75 6d 65 6e   the 4th argumen
31490 74 20 74 6f 20 73 71 6c 69 74 65 33 5f 66 69 6c  t to sqlite3_fil
314a0 65 5f 63 6f 6e 74 72 6f 6c 20 74 6f 20 62 65 20  e_control to be 
314b0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 0a  a pointer to an.
314c0 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 4c  ** instance of L
314d0 6f 63 6b 73 74 61 74 65 50 49 44 20 69 6e 69 74  ockstatePID init
314e0 69 61 6c 69 7a 65 64 20 77 69 74 68 20 61 20 4c  ialized with a L
314f0 6f 63 6b 73 74 61 74 65 50 49 44 2e 70 69 64 20  ockstatePID.pid 
31500 76 61 6c 75 65 20 65 71 75 61 6c 0a 2a 2a 20 74  value equal.** t
31510 6f 20 61 20 70 72 6f 63 65 73 73 20 49 44 20 74  o a process ID t
31520 6f 20 62 65 20 74 65 73 74 65 64 2c 20 6f 72 20  o be tested, or 
31530 74 68 65 20 73 70 65 63 69 61 6c 20 76 61 6c 75  the special valu
31540 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41  e SQLITE_LOCKSTA
31550 54 45 5f 41 4e 59 50 49 44 0a 2a 2a 20 54 68 65  TE_ANYPID.** The
31560 20 4c 6f 63 6b 73 74 61 74 65 2e 73 74 61 74 65   Lockstate.state
31570 20 76 61 6c 75 65 20 69 73 20 61 6c 77 61 79 73   value is always
31580 20 73 65 74 20 74 6f 20 6f 6e 65 20 6f 66 20 74   set to one of t
31590 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c  he following val
315a0 75 65 73 0a 2a 2a 20 77 68 65 6e 20 73 71 6c 69  ues.** when sqli
315b0 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
315c0 20 72 65 74 75 72 6e 73 3a 0a 2a 2a 20 0a 2a 2a   returns:.** .**
315d0 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54     SQLITE_LOCKST
315e0 41 54 45 5f 4f 46 46 20 20 20 20 6e 6f 20 61 63  ATE_OFF    no ac
315f0 74 69 76 65 20 73 71 6c 69 74 65 20 66 69 6c 65  tive sqlite file
31600 20 6c 6f 63 6b 73 20 6d 61 74 63 68 20 74 68 65   locks match the
31610 20 73 70 65 63 69 66 69 65 64 20 70 69 64 0a 2a   specified pid.*
31620 2a 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53  *   SQLITE_LOCKS
31630 54 41 54 45 5f 4f 4e 20 20 20 20 20 61 63 74 69  TATE_ON     acti
31640 76 65 20 73 71 6c 69 74 65 20 66 69 6c 65 20 6c  ve sqlite file l
31650 6f 63 6b 73 20 6d 61 74 63 68 20 74 68 65 20 73  ocks match the s
31660 70 65 63 69 66 69 65 64 20 70 69 64 0a 2a 2a 20  pecified pid.** 
31670 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54 41    SQLITE_LOCKSTA
31680 54 45 5f 4e 4f 54 41 44 42 20 70 61 74 68 20 70  TE_NOTADB path p
31690 6f 69 6e 74 73 20 74 6f 20 61 20 66 69 6c 65 20  oints to a file 
316a0 74 68 61 74 20 69 73 20 6e 6f 74 20 61 6e 20 73  that is not an s
316b0 71 6c 69 74 65 20 64 62 20 66 69 6c 65 0a 2a 2a  qlite db file.**
316c0 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53 54     SQLITE_LOCKST
316d0 41 54 45 5f 45 52 52 4f 52 20 20 70 61 74 68 20  ATE_ERROR  path 
316e0 77 61 73 20 6e 6f 74 20 76 61 69 6c 64 20 6f 72  was not vaild or
316f0 20 77 61 73 20 75 6e 72 65 61 64 61 62 6c 65 0a   was unreadable.
31700 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
31710 74 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 20 4c  t LockstatePID L
31720 6f 63 6b 73 74 61 74 65 50 49 44 3b 0a 73 74 72  ockstatePID;.str
31730 75 63 74 20 4c 6f 63 6b 73 74 61 74 65 50 49 44  uct LockstatePID
31740 20 7b 0a 20 20 70 69 64 5f 74 20 70 69 64 3b 20   {.  pid_t pid; 
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31760 2f 2a 20 50 72 6f 63 65 73 73 20 49 44 20 74 6f  /* Process ID to
31770 20 74 65 73 74 20 2a 2f 0a 20 20 69 6e 74 20 73   test */.  int s
31780 74 61 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  tate;           
31790 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 61        /* The sta
317a0 74 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 20 28  te of the lock (
317b0 72 65 74 75 72 6e 20 76 61 6c 75 65 29 20 2a 2f  return value) */
317c0 0a 7d 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 28  .};..#endif /* (
317d0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50  SQLITE_ENABLE_AP
317e0 50 4c 45 5f 53 50 49 3e 30 29 20 26 26 20 64 65  PLE_SPI>0) && de
317f0 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
31800 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61   */../*.** Threa
31810 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a  ding interface.*
31820 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
31830 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
31840 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  0.int sqlite3Thr
31850 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65  eadCreate(SQLite
31860 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a  Thread**,void*(*
31870 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b  )(void*),void*);
31880 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
31890 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72  adJoin(SQLiteThr
318a0 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23  ead*, void**);.#
318b0 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
318c0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
318d0 5f 44 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c  _DBPAGE_VTAB) ||
318e0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
318f0 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
31900 33 44 62 70 61 67 65 52 65 67 69 73 74 65 72 28  3DbpageRegister(
31910 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
31920 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
31930 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54  LITE_ENABLE_DBST
31940 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69  AT_VTAB) || defi
31950 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
31960 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74  .int sqlite3Dbst
31970 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  atRegister(sqlit
31980 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e3*);.#endif..in
31990 74 20 73 71 6c 69 74 65 33 45 78 70 72 56 65 63  t sqlite3ExprVec
319a0 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45  torSize(Expr *pE
319b0 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
319c0 33 45 78 70 72 49 73 56 65 63 74 6f 72 28 45 78  3ExprIsVector(Ex
319d0 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
319e0 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46   *sqlite3VectorF
319f0 69 65 6c 64 53 75 62 65 78 70 72 28 45 78 70 72  ieldSubexpr(Expr
31a00 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
31a10 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65 63  qlite3ExprForVec
31a20 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c  torField(Parse*,
31a30 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  Expr*,int);.void
31a40 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72   sqlite3VectorEr
31a50 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45  rorMsg(Parse*, E
31a60 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  xpr*);..#ifndef 
31a70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
31a80 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a  ILEOPTION_DIAGS.
31a90 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c  const char **sql
31aa0 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  ite3CompileOptio
31ab0 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a  ns(int *pnOpt);.
31ac0 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
31ad0 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f  * SQLITEINT_H */
31ae0 0a                                               .