/ Hex Artifact Content
Login

Artifact 2ef60a6d9a50e6eef224e9eae71b29a9fb91c301e882d9fbbb77afd50b6cf815:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 69 6c 65  *.** The compile
5710: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 53 51  -time options SQ
5720: 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52  LITE_MMAP_READWR
5730: 49 54 45 20 61 6e 64 20 0a 2a 2a 20 53 51 4c 49  ITE and .** SQLI
5740: 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f  TE_ENABLE_BATCH_
5750: 41 54 4f 4d 49 43 5f 57 52 49 54 45 20 61 72 65  ATOMIC_WRITE are
5760: 20 6e 6f 74 20 63 6f 6d 70 61 74 69 62 6c 65 20   not compatible 
5770: 77 69 74 68 20 6f 6e 65 20 61 6e 6f 74 68 65 72  with one another
5780: 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73 74 20 63 68  ..** You must ch
5790: 6f 6f 73 65 20 6f 6e 65 20 6f 72 20 74 68 65 20  oose one or the 
57a0: 6f 74 68 65 72 20 28 6f 72 20 6e 65 69 74 68 65  other (or neithe
57b0: 72 29 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e  r) but not both.
57c0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
57d0: 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44  SQLITE_MMAP_READ
57e0: 57 52 49 54 45 29 20 26 26 20 64 65 66 69 6e 65  WRITE) && define
57f0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
5800: 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
5810: 54 45 29 0a 23 65 72 72 6f 72 20 43 61 6e 6e 6f  TE).#error Canno
5820: 74 20 75 73 65 20 62 6f 74 68 20 53 51 4c 49 54  t use both SQLIT
5830: 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45  E_MMAP_READWRITE
5840: 20 61 6e 64 20 53 51 4c 49 54 45 5f 45 4e 41 42   and SQLITE_ENAB
5850: 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f  LE_BATCH_ATOMIC_
5860: 57 52 49 54 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  WRITE.#endif../*
5870: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
5880: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
5890: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
58a0: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
58b0: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
58c0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
58d0: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
58e0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
58f0: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
5900: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
5910: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
5920: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
5930: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
5940: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
5950: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
5960: 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4d  rs..*/.#ifndef M
5970: 49 4e 0a 23 20 64 65 66 69 6e 65 20 4d 49 4e 28  IN.# define MIN(
5980: 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41  A,B) ((A)<(B)?(A
5990: 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a 23 69  ):(B)).#endif.#i
59a0: 66 6e 64 65 66 20 4d 41 58 0a 23 20 64 65 66 69  fndef MAX.# defi
59b0: 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29  ne MAX(A,B) ((A)
59c0: 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  >(B)?(A):(B)).#e
59d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  ndif../*.** Swap
59e0: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
59f0: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
5a00: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
5a10: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
5a20: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
5a30: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
5a40: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
5a50: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
5a60: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
5a70: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
5a80: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
5a90: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
5aa0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
5ab0: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
5ac0: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
5ad0: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
5ae0: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
5af0: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
5b00: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
5b10: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
5b20: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
5b30: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
5b40: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
5b50: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
5b60: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
5b70: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
5b80: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
5b90: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
5ba0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
5bb0: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
5bc0: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
5bd0: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
5be0: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
5bf0: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
5c00: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
5c10: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
5c20: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
5c30: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
5c40: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
5c50: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
5c60: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5c70: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
5c80: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
5c90: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
5ca0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
5cb0: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
5cc0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
5cd0: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
5ce0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
5cf0: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
5d00: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
5d10: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
5d20: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
5d30: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
5d40: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
5d50: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
5d60: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d70: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
5d80: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
5d90: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
5da0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
5db0: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
5dc0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5dd0: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
5de0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5df0: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
5e00: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
5e10: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
5e20: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
5e30: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
5e40: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
5e50: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
5e60: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
5e70: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
5e80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5e90: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
5ea0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
5eb0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
5ec0: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
5ed0: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
5ee0: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
5ef0: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
5f00: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5f10: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
5f20: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
5f30: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
5f40: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5f50: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
5f60: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
5f70: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
5f80: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
5f90: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
5fa0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
5fb0: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
5fc0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
5fd0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
5fe0: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
5ff0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
6000: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
6010: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
6020: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
6030: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
6040: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
6050: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
6060: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
6070: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
6080: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
6090: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
60a0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
60b0: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
60c0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
60d0: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
60e0: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
60f0: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
6100: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
6110: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
6120: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
6130: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
6140: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
6150: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
6160: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
6170: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
6180: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
6190: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
61a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
61b0: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
61c0: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
61d0: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
61e0: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
61f0: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
6200: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
6210: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
6220: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
6230: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
6240: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
6250: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
6260: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
6270: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
6280: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
6290: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
62a0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
62b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
62c0: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
62d0: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
62e0: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
62f0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
6300: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
6310: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
6320: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
6330: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
6340: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
6350: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
6360: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
6370: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
6380: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
6390: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
63a0: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
63b0: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
63c0: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
63d0: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
63e0: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
63f0: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
6400: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
6410: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
6420: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
6430: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
6440: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
6450: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
6460: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
6470: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
6480: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
6490: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
64a0: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
64b0: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
64c0: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
64d0: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
64e0: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
64f0: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
6500: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
6510: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
6520: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
6530: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
6540: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
6550: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
6560: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
6570: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
6580: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
6590: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
65a0: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
65b0: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
65c0: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
65d0: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
65e0: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
65f0: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
6600: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
6610: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
6620: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
6630: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
6640: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
6650: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
6660: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
6670: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
6680: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
6690: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
66a0: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
66b0: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
66c0: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
66d0: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
66e0: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
66f0: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
6700: 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  ..** Examples:.*
6710: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
6720: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
6730: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
6740: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
6750: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
6760: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
6770: 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54 45  * Set the SQLITE
6780: 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74  _PTRSIZE macro t
6790: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
67a0: 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74  bytes in a point
67b0: 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
67c0: 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69  LITE_PTRSIZE.# i
67d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45  f defined(__SIZE
67e0: 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20  OF_POINTER__).# 
67f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6800: 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46  PTRSIZE __SIZEOF
6810: 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69  _POINTER__.# eli
6820: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
6830: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6840: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
6850: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
6860: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65  |    \.       de
6870: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
6880: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d  || defined(__arm
6890: 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  __)    || define
68a0: 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66  d(__x86).#   def
68b0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
68c0: 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20  ZE 4.# else.#   
68d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
68e0: 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a  RSIZE 8.# endif.
68f0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 75  #endif../* The u
6900: 70 74 72 20 74 79 70 65 20 69 73 20 61 6e 20 75  ptr type is an u
6910: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
6920: 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
6930: 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72 0a 2a  hold a pointer.*
6940: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48 41  /.#if defined(HA
6950: 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20 20 74  VE_STDINT_H).  t
6960: 79 70 65 64 65 66 20 75 69 6e 74 70 74 72 5f 74  ypedef uintptr_t
6970: 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53 51 4c   uptr;.#elif SQL
6980: 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34 0a 20  ITE_PTRSIZE==4. 
6990: 20 74 79 70 65 64 65 66 20 75 33 32 20 75 70 74   typedef u32 upt
69a0: 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  r;.#else.  typed
69b0: 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23 65 6e  ef u64 uptr;.#en
69c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  dif../*.** The S
69d0: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
69e0: 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63 6b 73  ,E) macro checks
69f0: 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69 6e 74   to see if point
6a00: 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  er P points to.*
6a10: 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65 74 77  * something betw
6a20: 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69 76 65  een S (inclusive
6a30: 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75 73 69  ) and E (exclusi
6a40: 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ve)..**.** In ot
6a50: 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69 73 20  her words, S is 
6a60: 61 20 62 75 66 66 65 72 20 61 6e 64 20 45 20 69  a buffer and E i
6a70: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
6a80: 68 65 20 66 69 72 73 74 20 62 79 74 65 20 61 66  he first byte af
6a90: 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  ter.** the end o
6aa0: 66 20 62 75 66 66 65 72 20 53 2e 20 20 54 68 69  f buffer S.  Thi
6ab0: 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e 73 20  s macro returns 
6ac0: 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e 74 73  true if P points
6ad0: 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a   to something.**
6ae0: 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
6af0: 6e 20 74 68 65 20 62 75 66 66 65 72 20 53 2e 0a  n the buffer S..
6b00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
6b10: 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20  E_WITHIN(P,S,E) 
6b20: 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28 75 70  (((uptr)(P)>=(up
6b30: 74 72 29 28 53 29 29 26 26 28 28 75 70 74 72 29  tr)(S))&&((uptr)
6b40: 28 50 29 3c 28 75 70 74 72 29 28 45 29 29 29 0a  (P)<(uptr)(E))).
6b50: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
6b60: 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  o determine whet
6b70: 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20  her the machine 
6b80: 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65  is big or little
6b90: 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20   endian,.** and 
6ba0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
6bb0: 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f  hat determinatio
6bc0: 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72  n is run-time or
6bd0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a   compile-time..*
6be0: 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65  *.** For best pe
6bf0: 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74  rformance, an at
6c00: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
6c10: 20 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79   guess at the by
6c20: 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e  te-order.** usin
6c30: 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72  g C-preprocessor
6c40: 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61   macros.  If tha
6c50: 74 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75  t is unsuccessfu
6c60: 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51  l, or if.** -DSQ
6c70: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 30  LITE_BYTEORDER=0
6c80: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79   is set, then by
6c90: 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65  te-order is dete
6ca0: 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e  rmined.** at run
6cb0: 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65  -time..*/.#ifnde
6cc0: 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  f SQLITE_BYTEORD
6cd0: 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ER.# if defined(
6ce0: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
6cf0: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
6d00: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
6d10: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
6d20: 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f    defined(__x86_
6d30: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
6d40: 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65  _x86_64__) || de
6d50: 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c  fined(_M_X64)  |
6d60: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
6d70: 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c  ned(_M_AMD64) ||
6d80: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29   defined(_M_ARM)
6d90: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
6da0: 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c  __x86)   ||    \
6db0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
6dc0: 61 72 6d 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e  arm__).#   defin
6dd0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
6de0: 45 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69  ER    1234.# eli
6df0: 66 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29  f defined(sparc)
6e00: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6e10: 5f 70 70 63 5f 5f 29 0a 23 20 20 20 64 65 66 69  _ppc__).#   defi
6e20: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
6e30: 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 65 6c  DER    4321.# el
6e40: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
6e50: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 30  LITE_BYTEORDER 0
6e60: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
6e70: 23 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  #if SQLITE_BYTEO
6e80: 52 44 45 52 3d 3d 34 33 32 31 0a 23 20 64 65 66  RDER==4321.# def
6e90: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
6ea0: 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69  DIAN    1.# defi
6eb0: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
6ec0: 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e  ENDIAN 0.# defin
6ed0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
6ee0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
6ef0: 31 36 42 45 0a 23 65 6c 69 66 20 53 51 4c 49 54  16BE.#elif SQLIT
6f00: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31 32 33  E_BYTEORDER==123
6f10: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
6f20: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
6f30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6f40: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
6f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6f60: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
6f70: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73  ITE_UTF16LE.#els
6f80: 65 0a 23 20 69 66 64 65 66 20 53 51 4c 49 54 45  e.# ifdef SQLITE
6f90: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
6fa0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
6fb0: 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65  3one = 1;.# else
6fc0: 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  .  extern const 
6fd0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
6fe0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
6ff0: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
7000: 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28  N    (*(char *)(
7010: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29  &sqlite3one)==0)
7020: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7030: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a  _LITTLEENDIAN (*
7040: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7050: 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69  3one)==1).# defi
7060: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
7070: 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f 42  ATIVE  (SQLITE_B
7080: 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f  IGENDIAN?SQLITE_
7090: 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55  UTF16BE:SQLITE_U
70a0: 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a  TF16LE).#endif..
70b0: 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20  /*.** Constants 
70c0: 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20  for the largest 
70d0: 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73  and smallest pos
70e0: 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67  sible 64-bit sig
70f0: 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  ned integers..**
7100: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72   These macros ar
7110: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f  e designed to wo
7120: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20  rk correctly on 
7130: 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20  both 32-bit and 
7140: 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c  64-bit.** compil
7150: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
7160: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28  LARGEST_INT64  (
7170: 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36  0xffffffff|(((i6
7180: 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
7190: 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c  2)).#define SMAL
71a0: 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36  LEST_INT64 (((i6
71b0: 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f  4)-1) - LARGEST_
71c0: 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  INT64)../*.** Ro
71d0: 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20  und up a number 
71e0: 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67  to the next larg
71f0: 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  er multiple of 8
7200: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a  .  This is used.
7210: 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79  ** to force 8-by
7220: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20  te alignment on 
7230: 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74  64-bit architect
7240: 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ures..*/.#define
7250: 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28   ROUND8(x)     (
7260: 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a  ((x)+7)&~7)../*.
7270: 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f  ** Round down to
7280: 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c   the nearest mul
7290: 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64  tiple of 8.*/.#d
72a0: 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38  efine ROUNDDOWN8
72b0: 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a  (x) ((x)&~7)../*
72c0: 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20  .** Assert that 
72d0: 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73  the pointer X is
72e0: 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38   aligned to an 8
72f0: 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20  -byte boundary. 
7300: 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69   This.** macro i
7310: 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68  s used only with
7320: 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76  in assert() to v
7330: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63  erify that the c
7340: 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20  ode gets.** all 
7350: 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69  alignment restri
7360: 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a  ctions correct..
7370: 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66  **.** Except, if
7380: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
7390: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73  LIGNED_MALLOC is
73a0: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74   defined, then t
73b0: 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  he.** underlying
73c0: 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d   malloc() implem
73d0: 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72  entation might r
73e0: 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20  eturn us 4-byte 
73f0: 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74  aligned.** point
7400: 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61  ers.  In that ca
7410: 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20  se, only verify 
7420: 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  4-byte alignment
7430: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
7440: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
7450: 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e  D_MALLOC.# defin
7460: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
7470: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
7480: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
7490: 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c  r*)0)&3)==0).#el
74a0: 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  se.# define EIGH
74b0: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
74c0: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
74d0: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
74e0: 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f  7)==0).#endif../
74f0: 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41  *.** Disable MMA
7500: 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77  P on platforms w
7510: 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e  here it is known
7520: 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a   to not work.*/.
7530: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70  #if defined(__Op
7540: 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69  enBSD__) || defi
7550: 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a  ned(__QNXNTO__).
7560: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
7570: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  AX_MMAP_SIZE.# d
7580: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
7590: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
75a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
75b0: 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  lt maximum size 
75c0: 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62  of memory used b
75d0: 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20  y memory-mapped 
75e0: 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a  I/O in the VFS.*
75f0: 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45  /.#ifdef __APPLE
7600: 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61  __.# include <Ta
7610: 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73  rgetConditionals
7620: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  .h>.#endif.#ifnd
7630: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
7640: 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65 66  AP_SIZE.# if def
7650: 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20  ined(__linux__) 
7660: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
7670: 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64  WIN32) \.  || (d
7680: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
7690: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d  ) && defined(__M
76a0: 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64  ACH__)) \.  || d
76b0: 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a  efined(__sun) \.
76c0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46    || defined(__F
76d0: 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c  reeBSD__) \.  ||
76e0: 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f   defined(__Drago
76f0: 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66 69  nFly__).#   defi
7700: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
7710: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
7720: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
7730: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
7740: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
7750: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
7760: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
7770: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
7780: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
7790: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
77a0: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
77b0: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
77c0: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
77d0: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
77e0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
77f0: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
7800: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
7810: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
7820: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
7830: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
7840: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
7850: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
7860: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
7870: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
7880: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7890: 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE>SQLITE_MAX_
78a0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65  MMAP_SIZE.# unde
78b0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
78c0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
78d0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
78e0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c  LT_MMAP_SIZE SQL
78f0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7900: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
7910: 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49  Only one of SQLI
7920: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20  TE_ENABLE_STAT3 
7930: 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
7940: 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65  _STAT4 can be de
7950: 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69  fined..** Priori
7960: 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53  ty is given to S
7970: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7980: 54 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61  T4.  If either a
7990: 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f  re defined, also
79a0: 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .** define SQLIT
79b0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
79c0: 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65  R_STAT4.*/.#ifde
79d0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
79e0: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
79f0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7a00: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
7a10: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7a20: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
7a30: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7a40: 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  AT3.# define SQL
7a50: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7a60: 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69  _OR_STAT4 1.#eli
7a70: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7a80: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
7a90: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
7aa0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7ab0: 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AT4.#endif../*.*
7ac0: 2a 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  * SELECTTRACE_EN
7ad0: 41 42 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69  ABLED will be ei
7ae0: 74 68 65 72 20 31 20 6f 72 20 30 20 64 65 70 65  ther 1 or 0 depe
7af0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
7b00: 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53   or not.** the S
7b10: 65 6c 65 63 74 20 71 75 65 72 79 20 67 65 6e 65  elect query gene
7b20: 72 61 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f  rator tracing lo
7b30: 67 69 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  gic is turned on
7b40: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
7b50: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
7b60: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
7b70: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
7b80: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
7b90: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
7ba0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
7bb0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
7bc0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7bd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7be0: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
7bf0: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
7c00: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
7c10: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
7c20: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
7c30: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
7c40: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
7c50: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
7c60: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
7c70: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
7c80: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
7c90: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
7ca0: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
7cb0: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
7cc0: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
7cd0: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
7ce0: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7cf0: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
7d00: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
7d10: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
7d20: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
7d30: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
7d40: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
7d50: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
7d60: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
7d70: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
7d80: 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76    int (*xFunc)(v
7d90: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
7da0: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
7db0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  k */.  void *pAr
7dc0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7dd0: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74    /* First arg t
7de0: 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  o busy callback 
7df0: 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20  */.  int nBusy; 
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e10: 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  /* Incremented w
7e20: 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61  ith each busy ca
7e30: 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ll */.};../*.** 
7e40: 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74  Name of the mast
7e50: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
7e60: 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64  e.  The master d
7e70: 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a  atabase table.**
7e80: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61   is a special ta
7e90: 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ble that holds t
7ea0: 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74  he names and att
7eb0: 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a  ributes of all.*
7ec0: 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e  * user tables an
7ed0: 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64  d indices..*/.#d
7ee0: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d  efine MASTER_NAM
7ef0: 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f  E       "sqlite_
7f00: 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20  master".#define 
7f10: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
7f20: 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d    "sqlite_temp_m
7f30: 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68  aster"../*.** Th
7f40: 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
7f50: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7f60: 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  se table..*/.#de
7f70: 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54  fine MASTER_ROOT
7f80: 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20         1../*.** 
7f90: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
7fa0: 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f  schema table..*/
7fb0: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
7fc0: 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49  TABLE(x)  ((!OMI
7fd0: 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31  T_TEMPDB)&&(x==1
7fe0: 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  )?TEMP_MASTER_NA
7ff0: 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a  ME:MASTER_NAME).
8000: 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69  ./*.** A conveni
8010: 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20  ence macro that 
8020: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
8030: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
8040: 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a  n.** an array..*
8050: 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53  /.#define ArrayS
8060: 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29  ize(X)    ((int)
8070: 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f  (sizeof(X)/sizeo
8080: 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a  f(X[0])))../*.**
8090: 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
80a0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
80b0: 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a  power of two.*/.
80c0: 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f  #define IsPowerO
80d0: 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28  fTwo(X) (((X)&((
80e0: 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  X)-1))==0)../*.*
80f0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
8100: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
8110: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
8120: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
8130: 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ()..** The sqlit
8140: 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69  e3DbFree() routi
8150: 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20  ne requires two 
8160: 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65  parameters inste
8170: 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65  ad of the.** one
8180: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
8190: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
81a0: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
81b0: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
81c0: 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  uce.** this magi
81d0: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
81e0: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
81f0: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
8200: 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74  y.  Any.** point
8210: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
8220: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
8230: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
8240: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
8250: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
8260: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
8270: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
8280: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
8290: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
82a0: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
82b0: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
82c0: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
82d0: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
82e0: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
82f0: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
8300: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
8310: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
8320: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
8330: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
8340: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
8350: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
8360: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
8370: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
8380: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
8390: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
83a0: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
83b0: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
83c0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
83d0: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
83e0: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
83f0: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
8400: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
8410: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
8420: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
8430: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
8440: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
8450: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
8460: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
8470: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
8480: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
8490: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
84a0: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
84b0: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
84c0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
84d0: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
84e0: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
84f0: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
8500: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
8510: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
8520: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
8530: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
8540: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
8550: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
8560: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
8570: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
8580: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
8590: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
85a0: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
85b0: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
85c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
85d0: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
85e0: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
85f0: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
8600: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
8610: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
8620: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
8630: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
8640: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
8650: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
8660: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
8670: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
8680: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
8690: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
86a0: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
86b0: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
86c0: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
86d0: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
86e0: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23  e SQLITE_WSD.  #
86f0: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8700: 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73  v) v.  #define s
8710: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
8720: 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
8730: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
8740: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
8750: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
8760: 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65  suppress compile
8770: 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74  r warnings and t
8780: 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65  o.** make it cle
8790: 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64  ar to human read
87a0: 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74  ers when a funct
87b0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
87c0: 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a   deliberately.**
87d0: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
87e0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
87f0: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
8800: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
8810: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
8820: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
8830: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
8840: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
8850: 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  e the.** impleme
8860: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51  ntation of an SQ
8870: 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70  L aggregate step
8880: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f   callback may no
8890: 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72  t use the.** par
88a0: 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e  ameter indicatin
88b0: 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  g the number of 
88c0: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
88d0: 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74   to the aggregat
88e0: 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77  e,.** if it know
88f0: 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  s that this is e
8900: 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72  nforced elsewher
8910: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20  e..**.** When a 
8920: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
8930: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  er is not used a
8940: 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65  t all within the
8950: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
8960: 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65  ion,.** it is ge
8970: 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e  nerally named "N
8980: 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55  otUsed" or "NotU
8990: 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68  sed2" to make th
89a0: 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65  ings even cleare
89b0: 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74  r..** However, t
89c0: 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20  hese macros may 
89d0: 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
89e0: 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67  suppress warning
89f0: 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20  s related to.** 
8a00: 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  parameters that 
8a10: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
8a20: 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67  e used depending
8a30: 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   on compilation 
8a40: 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20  options..** For 
8a50: 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61  example those pa
8a60: 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73  rameters only us
8a70: 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73  ed in assert() s
8a80: 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68  tatements. In th
8a90: 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65  ese.** cases the
8aa0: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
8ab0: 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65  named as per the
8ac0: 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f   usual conventio
8ad0: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ns..*/.#define U
8ae0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
8af0: 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65  x) (void)(x).#de
8b00: 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41  fine UNUSED_PARA
8b10: 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53  METER2(x,y) UNUS
8b20: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c  ED_PARAMETER(x),
8b30: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b40: 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61  (y)../*.** Forwa
8b50: 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  rd references to
8b60: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74   structures.*/.t
8b70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67  ypedef struct Ag
8b80: 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74  gInfo AggInfo;.t
8b90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
8ba0: 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f  thContext AuthCo
8bb0: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
8bc0: 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
8bd0: 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74  o AutoincInfo;.t
8be0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69  ypedef struct Bi
8bf0: 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70  tvec Bitvec;.typ
8c00: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
8c10: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
8c20: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
8c30: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
8c40: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
8c50: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c60: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
8c70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
8c80: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
8c90: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
8ca0: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
8cb0: 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20 46  ef struct FKey F
8cc0: 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Key;.typedef str
8cd0: 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74  uct FuncDestruct
8ce0: 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  or FuncDestructo
8cf0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8d00: 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65  t FuncDef FuncDe
8d10: 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  f;.typedef struc
8d20: 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 46 75  t FuncDefHash Fu
8d30: 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64  ncDefHash;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  ef struct IdList
8d50: 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66   IdList;.typedef
8d60: 20 73 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e   struct Index In
8d70: 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  dex;.typedef str
8d80: 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  uct IndexSample 
8d90: 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70  IndexSample;.typ
8da0: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 43  edef struct KeyC
8db0: 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74  lass KeyClass;.t
8dc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
8dd0: 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74  yInfo KeyInfo;.t
8de0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8df0: 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64  okaside Lookasid
8e00: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8e10: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
8e20: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74  LookasideSlot;.t
8e30: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f  ypedef struct Mo
8e40: 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70  dule Module;.typ
8e50: 65 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65  edef struct Name
8e60: 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74  Context NameCont
8e70: 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ext;.typedef str
8e80: 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65 3b  uct Parse Parse;
8e90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ea0: 50 72 65 55 70 64 61 74 65 20 50 72 65 55 70 64  PreUpdate PreUpd
8eb0: 61 74 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ate;.typedef str
8ec0: 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
8ed0: 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65  nts PrintfArgume
8ee0: 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nts;.typedef str
8ef0: 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65  uct RowSet RowSe
8f00: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8f10: 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65  t Savepoint Save
8f20: 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73  point;.typedef s
8f30: 74 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c  truct Select Sel
8f40: 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ect;.typedef str
8f50: 75 63 74 20 53 51 4c 69 74 65 54 68 72 65 61 64  uct SQLiteThread
8f60: 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74   SQLiteThread;.t
8f70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
8f80: 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44  lectDest SelectD
8f90: 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  est;.typedef str
8fa0: 75 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c  uct SrcList SrcL
8fb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8fc0: 75 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72  uct StrAccum Str
8fd0: 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73  Accum;.typedef s
8fe0: 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c  truct Table Tabl
8ff0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
9000: 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c  t TableLock Tabl
9010: 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73  eLock;.typedef s
9020: 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65  truct Token Toke
9030: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
9040: 74 20 54 72 65 65 56 69 65 77 20 54 72 65 65 56  t TreeView TreeV
9050: 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72  iew;.typedef str
9060: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
9070: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
9080: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
9090: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
90a0: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
90b0: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
90c0: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
90d0: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
90e0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
90f0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9100: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
9110: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
9120: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
9130: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
9140: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
9150: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
9160: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
9170: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9180: 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 20 41  With With;../* A
9190: 20 56 4c 69 73 74 20 6f 62 6a 65 63 74 20 72 65   VList object re
91a0: 63 6f 72 64 73 20 61 20 6d 61 70 70 69 6e 67 20  cords a mapping 
91b0: 62 65 74 77 65 65 6e 20 70 61 72 61 6d 65 74 65  between paramete
91c0: 72 73 2f 76 61 72 69 61 62 6c 65 73 2f 77 69 6c  rs/variables/wil
91d0: 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65  dcards.** in the
91e0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28   SQL statement (
91f0: 73 75 63 68 20 61 73 20 24 61 62 63 2c 20 40 70  such as $abc, @p
9200: 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64  qr, or :xyz) and
9210: 20 74 68 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20   the integer.** 
9220: 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
9230: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
9240: 74 68 61 74 20 70 61 72 61 6d 65 74 65 72 2e 20  that parameter. 
9250: 20 53 65 65 20 74 68 65 20 66 6f 72 6d 61 74 20   See the format 
9260: 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f  description.** o
9270: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 56 4c 69  n the sqlite3VLi
9280: 73 74 41 64 64 28 29 20 72 6f 75 74 69 6e 65 20  stAdd() routine 
9290: 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61  for more informa
92a0: 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74 20 69  tion.  A VList i
92b0: 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74  s really.** just
92c0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74   an array of int
92d0: 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65  egers..*/.typede
92e0: 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a  f int VList;../*
92f0: 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69  .** Defer sourci
9300: 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74  ng vdbe.h and bt
9310: 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65  ree.h until afte
9320: 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a  r the "u8" and.*
9330: 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20  * "BusyHandler" 
9340: 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68  typedefs. vdbe.h
9350: 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61   also requires a
9360: 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71   few of the opaq
9370: 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79  ue.** pointer ty
9380: 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65  pes (i.e. FuncDe
9390: 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65  f) defined above
93a0: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62  ..*/.#include "b
93b0: 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  tree.h".#include
93c0: 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75   "vdbe.h".#inclu
93d0: 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e  de "pager.h".#in
93e0: 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22  clude "pcache.h"
93f0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
9400: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
9410: 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49  .h"../* The SQLI
9420: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
9430: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
9440: 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74  tion used to set
9450: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20   the default.** 
9460: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74  synchronous sett
9470: 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49  ing to EXTRA.  I
9480: 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73  t is no longer s
9490: 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66  upported..*/.#if
94a0: 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41  def SQLITE_EXTRA
94b0: 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69  _DURABLE.# warni
94c0: 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45  ng Use SQLITE_DE
94d0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
94e0: 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53  S=3 instead of S
94f0: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
9500: 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  BLE.# define SQL
9510: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9520: 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66  HRONOUS 3.#endif
9530: 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20  ../*.** Default 
9540: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65  synchronous leve
9550: 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ls..**.** Note t
9560: 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63  hat (for historc
9570: 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20  al reasons) the 
9580: 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55  PAGER_SYNCHRONOU
9590: 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65  S_* macros diffe
95a0: 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51  r.** from the SQ
95b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
95c0: 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62  CHRONOUS value b
95d0: 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  y 1..**.**      
95e0: 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48       PAGER_SYNCH
95f0: 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46  RONOUS       DEF
9600: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9610: 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20  .**   OFF       
9620: 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20      1           
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0a                0.
9640: 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20  **   NORMAL     
9650: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
9660: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a               1.*
9670: 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20  *   FULL        
9680: 20 20 33 20 20 20 20 20 20 20 20 20 20 20 20 20    3             
9690: 20 20 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a              2.**
96a0: 20 20 20 45 58 54 52 41 20 20 20 20 20 20 20 20     EXTRA        
96b0: 20 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20   4              
96c0: 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a             3.**.
96d0: 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41 20 73  ** The "PRAGMA s
96e0: 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74  ynchronous" stat
96f0: 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20  ement also uses 
9700: 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e  the zero-based n
9710: 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74  umbers..** In ot
9720: 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a  her words, the z
9730: 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72  ero-based number
9740: 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61  s are used for a
9750: 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65  ll external inte
9760: 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68  rfaces.** and th
9770: 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75  e one-based valu
9780: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 74 65  es are used inte
9790: 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64  rnally..*/.#ifnd
97a0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
97b0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  T_SYNCHRONOUS.# 
97c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
97d0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
97e0: 53 20 32 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  S 2.#endif.#ifnd
97f0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
9800: 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55  T_WAL_SYNCHRONOU
9810: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
9820: 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59  E_DEFAULT_WAL_SY
9830: 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45  NCHRONOUS SQLITE
9840: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9850: 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  NOUS.#endif../*.
9860: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
9870: 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65   file to be acce
9880: 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73 74  ssed by the syst
9890: 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  em is an instanc
98a0: 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c  e.** of the foll
98b0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
98c0: 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d    There are norm
98d0: 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73  ally two of thes
98e0: 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20  e structures.** 
98f0: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44  in the sqlite.aD
9900: 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b  b[] array.  aDb[
9910: 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  0] is the main d
9920: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
9930: 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68  .** aDb[1] is th
9940: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
9950: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d  used to hold tem
9960: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
9970: 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61  Additional.** da
9980: 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20 61  tabases may be a
9990: 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75  ttached..*/.stru
99a0: 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a  ct Db {.  char *
99b0: 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f  zDbSName;      /
99c0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64  * Name of this d
99d0: 61 74 61 62 61 73 65 2e 20 28 73 63 68 65 6d 61  atabase. (schema
99e0: 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e   name, not filen
99f0: 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65 65 20  ame) */.  Btree 
9a00: 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f  *pBt;          /
9a10: 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72  * The B*Tree str
9a20: 75 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20  ucture for this 
9a30: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
9a40: 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76  .  u8 safety_lev
9a50: 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61  el;     /* How a
9a60: 67 67 72 65 73 73 69 76 65 20 61 74 20 73 79 6e  ggressive at syn
9a70: 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73  cing data to dis
9a80: 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e 63 53  k */.  u8 bSyncS
9a90: 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  et;         /* T
9aa0: 72 75 65 20 69 66 20 22 50 52 41 47 4d 41 20 73  rue if "PRAGMA s
9ab0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61  ynchronous=N" ha
9ac0: 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20  s been run */.  
9ad0: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
9ae0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
9af0: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
9b00: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
9b10: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
9b20: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
9b30: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
9b40: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
9b50: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
9b60: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
9b70: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
9b80: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
9b90: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
9ba0: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
9bb0: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
9bc0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
9bd0: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
9be0: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
9bf0: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
9c00: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
9c10: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
9c20: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
9c30: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
9c40: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
9c50: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
9c60: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
9c70: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
9c80: 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  **.** Schema obj
9c90: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
9ca0: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
9cb0: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
9cc0: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
9cd0: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
9ce0: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
9cf0: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
9d00: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
9d10: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
9d20: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
9d30: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
9d40: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
9d50: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
9d60: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
9d70: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
9d80: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
9d90: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
9da0: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
9db0: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
9dc0: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
9dd0: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
9de0: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
9df0: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
9e00: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
9e10: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
9e20: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
9e30: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
9e40: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
9e50: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
9e60: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
9e70: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
9e80: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
9e90: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
9ea0: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
9eb0: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
9ec0: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
9ed0: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
9ee0: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
9ef0: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
9f00: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
9f10: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
9f20: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
9f30: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
9f40: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
9f50: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
9f60: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
9f70: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
9f80: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
9f90: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
9fa0: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
9fb0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
9fc0: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
9fd0: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
9fe0: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
9ff0: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
a000: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
a010: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
a020: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
a030: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
a040: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
a050: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
a060: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
a070: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
a080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
a090: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
a0a0: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
a0b0: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
a0c0: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
a0d0: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
a0e0: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
a0f0: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
a100: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
a110: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
a120: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
a130: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
a140: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
a150: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
a160: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
a170: 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44  bits in the.** D
a180: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
a190: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
a1a0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
a1b0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
a1c0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
a1d0: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
a1e0: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
a1f0: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
a200: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
a210: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
a220: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
a230: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44  ))!=0).#define D
a240: 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49  bSetProperty(D,I
a250: 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62  ,P)     (D)->aDb
a260: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
a270: 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64  emaFlags|=(P).#d
a280: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
a290: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
a2a0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
a2b0: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
a2c0: 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  =~(P)../*.** All
a2d0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
a2e0: 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e  the DB.pSchema->
a2f0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  flags field..**.
a300: 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61  ** The DB_Schema
a310: 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73  Loaded flag is s
a320: 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74  et after the dat
a330: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
a340: 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e   been.** read in
a350: 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68  to internal hash
a360: 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44   tables..**.** D
a370: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d  B_UnresetViews m
a380: 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72  eans that one or
a390: 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65   more views have
a3a0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
a3b0: 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  at.** have been 
a3c0: 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20  filled out.  If 
a3d0: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
a3e0: 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  es, these column
a3f0: 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20   names might.** 
a400: 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74  changes and so t
a410: 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65  he view will nee
a420: 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a  d to be reset..*
a430: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68  /.#define DB_Sch
a440: 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30  emaLoaded    0x0
a450: 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65  001  /* The sche
a460: 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64  ma has been load
a470: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  ed */.#define DB
a480: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20  _UnresetViews   
a490: 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65   0x0002  /* Some
a4a0: 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69   views have defi
a4b0: 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ned column names
a4c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45   */.#define DB_E
a4d0: 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30  mpty           0
a4e0: 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69  x0004  /* The fi
a4f0: 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e  le is empty (len
a500: 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a  gth 0 bytes) */.
a510: 23 64 65 66 69 6e 65 20 44 42 5f 52 65 73 65 74  #define DB_Reset
a520: 57 61 6e 74 65 64 20 20 20 20 20 30 78 30 30 30  Wanted     0x000
a530: 38 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20  8  /* Reset the 
a540: 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 53 63 68  schema when nSch
a550: 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f  emaLock==0 */../
a560: 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
a570: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e  of different kin
a580: 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61  ds of things tha
a590: 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64  t can be limited
a5a0: 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71  .** using the sq
a5b0: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e  lite3_limit() in
a5c0: 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66  terface..*/.#def
a5d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  ine SQLITE_N_LIM
a5e0: 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54  IT (SQLITE_LIMIT
a5f0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b  _WORKER_THREADS+
a600: 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  1)../*.** Lookas
a610: 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20  ide malloc is a 
a620: 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a  set of fixed-siz
a630: 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63  e buffers that c
a640: 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f  an be used.** to
a650: 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74   satisfy small t
a660: 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20  ransient memory 
a670: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65  allocation reque
a680: 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a  sts for objects.
a690: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
a6a0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
a6b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
a6c0: 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ion.  The use of
a6d0: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
a6e0: 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20  lloc provides a 
a6f0: 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
a700: 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d  ormance enhancem
a710: 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31  ent.** (approx 1
a720: 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20  0%) by avoiding 
a730: 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f  numerous malloc/
a740: 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68  free requests wh
a750: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53  ile parsing.** S
a760: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  QL statements..*
a770: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69  *.** The Lookasi
a780: 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  de structure hol
a790: 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ds configuration
a7a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
a7b0: 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73  ut the.** lookas
a7c0: 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79  ide malloc subsy
a7d0: 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69  stem.  Each avai
a7e0: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  lable memory all
a7f0: 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68  ocation in.** th
a800: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73  e lookaside subs
a810: 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20  ystem is stored 
a820: 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
a830: 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f   of LookasideSlo
a840: 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a  t.** objects..**
a850: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** Lookaside al
a860: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e  locations are on
a870: 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f  ly allowed for o
a880: 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20  bjects that are 
a890: 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69  associated.** wi
a8a0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
a8b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
a8c0: 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68  ion.  Hence, sch
a8d0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
a8e0: 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f  cannot.** be sto
a8f0: 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65  red in lookaside
a900: 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72   because in shar
a910: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68  ed cache mode th
a920: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
a930: 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65  tion.** is share
a940: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61  d by multiple da
a950: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
a960: 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20  ns.  Therefore, 
a970: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
a980: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
a990: 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69  ion, the Lookasi
a9a0: 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67  de.bEnabled flag
a9b0: 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74   is cleared so t
a9c0: 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  hat.** lookaside
a9d0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
a9e0: 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e   not used to con
a9f0: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
aa00: 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  a objects..*/.st
aa10: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b  ruct Lookaside {
aa20: 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c 65 3b  .  u32 bDisable;
aa30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
aa40: 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65 20 6c  ly operate the l
aa50: 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20 7a 65  ookaside when ze
aa60: 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20  ro */.  u16 sz; 
aa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa80: 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
aa90: 62 75 66 66 65 72 20 69 6e 20 62 79 74 65 73 20  buffer in bytes 
aaa0: 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65  */.  u8 bMalloce
aab0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
aac0: 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f  True if pStart o
aad0: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
aae0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f  ite3_malloc() */
aaf0: 0a 20 20 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20  .  u32 nSlot;   
ab00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
ab10: 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64  mber of lookasid
ab20: 65 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65  e slots allocate
ab30: 64 20 2a 2f 0a 20 20 75 33 32 20 61 6e 53 74 61  d */.  u32 anSta
ab40: 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f  t[3];          /
ab50: 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73  * 0: hits.  1: s
ab60: 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20  ize misses.  2: 
ab70: 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20  full misses */. 
ab80: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
ab90: 70 49 6e 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74  pInit;   /* List
aba0: 20 6f 66 20 62 75 66 66 65 72 73 20 6e 6f 74 20   of buffers not 
abb0: 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20  previously used 
abc0: 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  */.  LookasideSl
abd0: 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20  ot *pFree;   /* 
abe0: 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c  List of availabl
abf0: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  e buffers */.  v
ac00: 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20  oid *pStart;    
ac10: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
ac20: 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c  byte of availabl
ac30: 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a  e memory space *
ac40: 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20  /.  void *pEnd; 
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
ac60: 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65  irst byte past e
ac70: 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  nd of available 
ac80: 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75  space */.};.stru
ac90: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ct LookasideSlot
aca0: 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c   {.  LookasideSl
acb0: 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a  ot *pNext;    /*
acc0: 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20   Next buffer in 
acd0: 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65  the list of free
ace0: 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a   buffers */.};..
acf0: 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62  /*.** A hash tab
ad00: 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20  le for built-in 
ad10: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
ad20: 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63 61 74  ions.  (Applicat
ad30: 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66  ion-defined.** f
ad40: 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20 72  unctions use a r
ad50: 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74 61 62  egular table tab
ad60: 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29  le from hash.h.)
ad70: 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68  .**.** Hash each
ad80: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
ad90: 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74  re into one of t
ada0: 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61  he FuncDefHash.a
adb0: 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c  [] slots..** Col
adc0: 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74  lisions are on t
add0: 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70 48 61  he FuncDef.u.pHa
ade0: 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65  sh chain..*/.#de
adf0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
ae00: 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74 72 75  _HASH_SZ 23.stru
ae10: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b  ct FuncDefHash {
ae20: 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 53 51  .  FuncDef *a[SQ
ae30: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53  LITE_FUNC_HASH_S
ae40: 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73  Z];       /* Has
ae50: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
ae60: 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66  tions */.};..#if
ae70: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
ae80: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f  AUTHENTICATION./
ae90: 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e  *.** Information
aea0: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71   held in the "sq
aeb0: 6c 69 74 65 33 22 20 64 61 74 61 62 61 73 65 20  lite3" database 
aec0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
aed0: 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  t and used.** to
aee0: 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75 74   manage user aut
aef0: 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a  hentication..*/.
af00: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73  typedef struct s
af10: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
af20: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
af30: 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  ;.struct sqlite3
af40: 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38  _userauth {.  u8
af50: 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20   authLevel;     
af60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
af70: 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63  urrent authentic
af80: 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20  ation level */. 
af90: 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20   int nAuthPW;   
afa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
afb0: 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41  * Size of the zA
afc0: 75 74 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a  uthPW in bytes *
afd0: 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50  /.  char *zAuthP
afe0: 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  W;              
aff0: 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73    /* Password us
b000: 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61  ed to authentica
b010: 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  te */.  char *zA
b020: 75 74 68 55 73 65 72 3b 20 20 20 20 20 20 20 20  uthUser;        
b030: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61        /* User na
b040: 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74 68 65  me used to authe
b050: 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f  nticate */.};../
b060: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
b070: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65   for sqlite3_use
b080: 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20  rauth.authLevel 
b090: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
b0a0: 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20  _Unknown     0  
b0b0: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
b0c0: 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65  tion not yet che
b0d0: 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cked */.#define 
b0e0: 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20  UAUTH_Fail      
b0f0: 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20    1     /* User 
b100: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66  authentication f
b110: 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ailed */.#define
b120: 20 55 41 55 54 48 5f 55 73 65 72 20 20 20 20 20   UAUTH_User     
b130: 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68     2     /* Auth
b140: 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 20 6e  enticated as a n
b150: 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64  ormal user */.#d
b160: 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69  efine UAUTH_Admi
b170: 6e 20 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a  n       3     /*
b180: 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61   Authenticated a
b190: 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74  s an administrat
b1a0: 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69  or */../* Functi
b1b0: 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79  ons used only by
b1c0: 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74   user authorizat
b1d0: 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74  ion logic */.int
b1e0: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
b1f0: 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72  Table(const char
b200: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  *);.int sqlite3U
b210: 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69  serAuthCheckLogi
b220: 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
b230: 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69   char*,u8*);.voi
b240: 64 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  d sqlite3UserAut
b250: 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b  hInit(sqlite3*);
b260: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79  .void sqlite3Cry
b270: 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63  ptFunc(sqlite3_c
b280: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
b290: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23  te3_value**);..#
b2a0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
b2b0: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
b2c0: 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79  ION */../*.** ty
b2d0: 70 65 64 65 66 20 66 6f 72 20 74 68 65 20 61 75  pedef for the au
b2e0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c  thorization call
b2f0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  back function..*
b300: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
b310: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
b320: 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e  ION.  typedef in
b330: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
b340: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
b350: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b360: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b370: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
b3a0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
b3b0: 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20  e.  typedef int 
b3c0: 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29  (*sqlite3_xauth)
b3d0: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
b3e0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b3f0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a  r*,const char*,.
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
b420: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
b430: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
b440: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
b450: 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73 20 61  TED./* This is a
b460: 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45 5f 54  n extra SQLITE_T
b470: 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61 74 20  RACE macro that 
b480: 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67 61 63  indicates "legac
b490: 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e  y" tracing.** in
b4a0: 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20 73 71   the style of sq
b4b0: 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f  lite3_trace().*/
b4c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b4d0: 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 30 78  TRACE_LEGACY  0x
b4e0: 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  80.#else.#define
b4f0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45   SQLITE_TRACE_LE
b500: 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66 20 2f  GACY  0.#endif /
b510: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  * SQLITE_OMIT_DE
b520: 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f 2a  PRECATED */.../*
b530: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
b540: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
b550: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
b560: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
b570: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
b580: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
b590: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
b5b0: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
b5c0: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
b5d0: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
b5e0: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
b5f0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
b600: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
b610: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
b620: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
b630: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
b640: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
b650: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
b660: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
b670: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
b680: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
b690: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
b6a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
b6b0: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
b6c0: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b6e0: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
b6f0: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
b700: 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6d 44 62  use */.  u32 mDb
b710: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
b720: 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20         /* flags 
b730: 72 65 63 6f 72 64 69 6e 67 20 69 6e 74 65 72 6e  recording intern
b740: 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20 75 33  al state */.  u3
b750: 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  2 flags;        
b760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66              /* f
b770: 6c 61 67 73 20 73 65 74 74 61 62 6c 65 20 62 79  lags settable by
b780: 20 70 72 61 67 6d 61 73 2e 20 53 65 65 20 62 65   pragmas. See be
b790: 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  low */.  i64 las
b7a0: 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20  tRowid;         
b7b0: 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20         /* ROWID 
b7c0: 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69  of most recent i
b7d0: 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65  nsert (see above
b7e0: 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61  ) */.  i64 szMma
b7f0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
b800: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
b810: 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e  mmap_size settin
b820: 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53 63 68 65  g */.  u32 nSche
b830: 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  maLock;         
b840: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72       /* Do not r
b850: 65 73 65 74 20 74 68 65 20 73 63 68 65 6d 61 20  eset the schema 
b860: 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f  when non-zero */
b870: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
b880: 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20  openFlags;      
b890: 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64   /* Flags passed
b8a0: 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e   to sqlite3_vfs.
b8b0: 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74  xOpen() */.  int
b8c0: 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
b8d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
b8e0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
b8f0: 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20  code (SQLITE_*) 
b900: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b  */.  int errMask
b910: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b920: 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63     /* & result c
b930: 6f 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62  odes with this b
b940: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
b950: 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73 45 72 72  */.  int iSysErr
b960: 6e 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  no;             
b970: 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75     /* Errno valu
b980: 65 20 66 72 6f 6d 20 6c 61 73 74 20 73 79 73 74  e from last syst
b990: 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31  em error */.  u1
b9a0: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
b9c0: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
b9d0: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
b9e0: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ions */.  u8 enc
b9f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ba00: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
ba10: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38  encoding */.  u8
ba20: 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20   autoCommit;    
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
ba40: 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  he auto-commit f
ba50: 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d  lag. */.  u8 tem
ba60: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
ba70: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
ba80: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
ba90: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
baa0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
bab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
bac0: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
bad0: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
bae0: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e  ure */.  u8 bBen
baf0: 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  ignMalloc;      
bb00: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
bb10: 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20 69 66   require OOMs if
bb20: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 64 66   true */.  u8 df
bb30: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
bb40: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
bb50: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
bb60: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
bb70: 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68  s */.  signed ch
bb80: 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20  ar nextAutovac; 
bb90: 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20       /* Autovac 
bba0: 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41  setting after VA
bbb0: 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20  CUUM if >=0 */. 
bbc0: 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b   u8 suppressErr;
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bbe0: 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65  * Do not issue e
bbf0: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66  rror messages if
bc00: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74   true */.  u8 vt
bc10: 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20  abOnConflict;   
bc20: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
bc30: 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20  e to return for 
bc40: 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c  s3_vtab_on_confl
bc50: 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73  ict() */.  u8 is
bc60: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
bc70: 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65  oint;    /* True
bc80: 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73   if the outermos
bc90: 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  t savepoint is a
bca0: 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61   TS */.  u8 mTra
bcb0: 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ce;             
bcc0: 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f         /* zero o
bcd0: 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f 54 52  r more SQLITE_TR
bce0: 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75  ACE flags */.  u
bcf0: 38 20 73 6b 69 70 42 74 72 65 65 4d 75 74 65 78  8 skipBtreeMutex
bd00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
bd10: 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61 72 65  True if no share
bd20: 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e 64 73  d-cache backends
bd30: 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45 78 65   */.  u8 nSqlExe
bd40: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
bd50: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
bd60: 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45   pending OP_SqlE
bd70: 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20  xec opcodes */. 
bd80: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
bd90: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
bda0: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
bdb0: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
bdc0: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
bdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bde0: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
bdf0: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
be00: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
be10: 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20  int nChange;    
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
be30: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
be40: 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  by sqlite3_chang
be50: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  es() */.  int nT
be60: 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20  otalChange;     
be70: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
be80: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
be90: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
bea0: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c  es() */.  int aL
beb0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49  imit[SQLITE_N_LI
bec0: 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74  MIT];   /* Limit
bed0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53  s */.  int nMaxS
bee0: 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20  orterMmap;      
bef0: 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
bf00: 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20  size of regions 
bf10: 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72  mapped by sorter
bf20: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c   */.  struct sql
bf30: 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20  ite3InitInfo {  
bf40: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
bf50: 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69  on used during i
bf60: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f  nitialization */
bf70: 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d  .    int newTnum
bf80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bf90: 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20   /* Rootpage of 
bfa0: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74  table being init
bfb0: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
bfc0: 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  8 iDb;          
bfd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
bfe0: 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62  ich db file is b
bff0: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
c000: 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b   */.    u8 busy;
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c020: 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63      /* TRUE if c
c030: 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c  urrently initial
c040: 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73  izing */.    uns
c050: 69 67 6e 65 64 20 6f 72 70 68 61 6e 54 72 69 67  igned orphanTrig
c060: 67 65 72 20 3a 20 31 3b 20 2f 2a 20 4c 61 73 74  ger : 1; /* Last
c070: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72   statement is or
c080: 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67  phaned TEMP trig
c090: 67 65 72 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ger */.    unsig
c0a0: 6e 65 64 20 69 6d 70 6f 73 74 65 72 54 61 62 6c  ned imposterTabl
c0b0: 65 20 3a 20 31 3b 20 2f 2a 20 42 75 69 6c 64 69  e : 1; /* Buildi
c0c0: 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74  ng an imposter t
c0d0: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  able */.    unsi
c0e0: 67 6e 65 64 20 72 65 6f 70 65 6e 4d 65 6d 64 62  gned reopenMemdb
c0f0: 20 3a 20 31 3b 20 20 20 2f 2a 20 41 54 54 41 43   : 1;   /* ATTAC
c100: 48 20 69 73 20 72 65 61 6c 6c 79 20 61 20 72 65  H is really a re
c110: 6f 70 65 6e 20 75 73 69 6e 67 20 4d 65 6d 44 42  open using MemDB
c120: 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20   */.  } init;.  
c130: 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b  int nVdbeActive;
c140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c150: 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73   Number of VDBEs
c160: 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69   currently runni
c170: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  ng */.  int nVdb
c180: 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20  eRead;          
c190: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c1a0: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
c1b0: 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69  that read or wri
c1c0: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
c1d0: 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20  eWrite;         
c1e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c1f0: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
c200: 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72  that read and wr
c210: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
c220: 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20  beExec;         
c230: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c240: 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
c250: 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a   to VdbeExec() *
c260: 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f  /.  int nVDestro
c270: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
c280: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c290: 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f  ctive OP_VDestro
c2a0: 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a  y operations */.
c2b0: 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e    int nExtension
c2c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c2d0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61  /* Number of loa
c2e0: 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a  ded extensions *
c2f0: 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65  /.  void **aExte
c300: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
c310: 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68    /* Array of sh
c320: 61 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e  ared library han
c330: 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  dles */.  int (*
c340: 78 54 72 61 63 65 29 28 75 33 32 2c 76 6f 69 64  xTrace)(u32,void
c350: 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20  *,void*,void*); 
c360: 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e      /* Trace fun
c370: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
c380: 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20  *pTraceArg;     
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3a0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c3b0: 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75   to the trace fu
c3c0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
c3d0: 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69   (*xProfile)(voi
c3e0: 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  d*,const char*,u
c3f0: 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69  64);  /* Profili
c400: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ng function */. 
c410: 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41   void *pProfileA
c420: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
c430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c440: 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c  gument to profil
c450: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
c460: 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67  void *pCommitArg
c470: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c480: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c490: 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b   xCommitCallback
c4a0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
c4b0: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76  ommitCallback)(v
c4c0: 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76  oid*);    /* Inv
c4d0: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
c4e0: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
c4f0: 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20  *pRollbackArg;  
c500: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c510: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c  Argument to xRol
c520: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20  lbackCallback() 
c530: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c  */.  void (*xRol
c540: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
c550: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
c560: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
c570: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
c580: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
c590: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
c5a0: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
c5b0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
c5c0: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
c5d0: 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  t64);.#ifdef SQL
c5e0: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
c5f0: 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64  DATE_HOOK.  void
c600: 20 2a 70 50 72 65 55 70 64 61 74 65 41 72 67 3b   *pPreUpdateArg;
c610: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
c620: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
c630: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
c640: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  k */.  void (*xP
c650: 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
c660: 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  )(   /* Register
c670: 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
c680: 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28  _preupdate_hook(
c690: 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73  ) */.    void*,s
c6a0: 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72  qlite3*,int,char
c6b0: 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e   const*,char con
c6c0: 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  st*,sqlite3_int6
c6d0: 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a  4,sqlite3_int64.
c6e0: 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65    );.  PreUpdate
c6f0: 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20 20   *pPreUpdate;   
c700: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
c710: 66 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d 75  for active pre-u
c720: 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a  pdate callback *
c730: 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  /.#endif /* SQLI
c740: 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44  TE_ENABLE_PREUPD
c750: 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e  ATE_HOOK */.#ifn
c760: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
c770: 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c  WAL.  int (*xWal
c780: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a  Callback)(void *
c790: 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  , sqlite3 *, con
c7a0: 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
c7b0: 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67  .  void *pWalArg
c7c0: 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28  ;.#endif.  void(
c7d0: 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f  *xCollNeeded)(vo
c7e0: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
c7f0: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
c800: 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a  char*);.  void(*
c810: 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76  xCollNeeded16)(v
c820: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
c830: 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74  t eTextRep,const
c840: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
c850: 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b  *pCollNeededArg;
c860: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
c870: 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20   *pErr;         
c880: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
c890: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
c8a0: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76  .  union {.    v
c8b0: 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e  olatile int isIn
c8c0: 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72  terrupted; /* Tr
c8d0: 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e  ue if sqlite3_in
c8e0: 74 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e  terrupt has been
c8f0: 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64   called */.    d
c900: 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20  ouble notUsed1; 
c910: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
c920: 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a  acer */.  } u1;.
c930: 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b    Lookaside look
c940: 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
c950: 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  /* Lookaside mal
c960: 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  loc configuratio
c970: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
c980: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
c990: 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33  ZATION.  sqlite3
c9a0: 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20 20 20  _xauth xAuth;   
c9b0: 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73         /* Access
c9c0: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66   authorization f
c9d0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
c9e0: 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20  d *pAuthArg;    
c9f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
ca00: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  t argument to th
ca10: 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66 75  e access auth fu
ca20: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  nction */.#endif
ca30: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
ca40: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
ca50: 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78  LLBACK.  int (*x
ca60: 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a  Progress)(void *
ca70: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72  );     /* The pr
ca80: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
ca90: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67  */.  void *pProg
caa0: 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20 20  ressArg;        
cab0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
cac0: 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  o the progress c
cad0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73  allback */.  uns
cae0: 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f  igned nProgressO
caf0: 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ps;        /* Nu
cb00: 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20  mber of opcodes 
cb10: 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c  for progress cal
cb20: 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a  lback */.#endif.
cb30: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
cb40: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
cb50: 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20  .  int nVTrans; 
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb70: 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69   /* Allocated si
cb80: 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f  ze of aVTrans */
cb90: 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b  .  Hash aModule;
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbb0: 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79   /* populated by
cbc0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
cbd0: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74  module() */.  Vt
cbe0: 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b  abCtx *pVtabCtx;
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
cc00: 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76  ontext for activ
cc10: 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63  e vtab connect/c
cc20: 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c  reate */.  VTabl
cc30: 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20  e **aVTrans;    
cc40: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74           /* Virt
cc50: 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20  ual tables with 
cc60: 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
cc70: 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  s */.  VTable *p
cc80: 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 20  Disconnect;     
cc90: 20 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65       /* Disconne
cca0: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
ccb0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
ccc0: 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48  () */.#endif.  H
ccd0: 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20  ash aFunc;      
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ccf0: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
cd00: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
cd10: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
cd20: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
cd30: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
cd40: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
cd50: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
cd60: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
cd70: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
cd80: 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62  back */.  Db aDb
cd90: 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20  Static[2];      
cda0: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69          /* Stati
cdb0: 63 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20  c space for the 
cdc0: 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e  2 default backen
cdd0: 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  ds */.  Savepoin
cde0: 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20  t *pSavepoint;  
cdf0: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
ce00: 20 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e   active savepoin
ce10: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79  ts */.  int busy
ce20: 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20  Timeout;        
ce30: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61        /* Busy ha
ce40: 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69  ndler timeout, i
ce50: 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20  n msec */.  int 
ce60: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  nSavepoint;     
ce70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ce80: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
ce90: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
cea0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74  s */.  int nStat
ceb0: 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ement;          
cec0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
ced0: 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65  f nested stateme
cee0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
cef0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
cf00: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
cf10: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
cf20: 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  red constraints 
cf30: 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
cf40: 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  . */.  i64 nDefe
cf50: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
cf60: 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65       /* Net defe
cf70: 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63  rred immediate c
cf80: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
cf90: 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65  int *pnBytesFree
cfa0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
cfb0: 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e   If not NULL, in
cfc0: 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20  crement this in 
cfd0: 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64  DbFree() */.#ifd
cfe0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
cff0: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
d000: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
d010: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
d020: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
d030: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
d040: 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  ER.  ** mutex, n
d050: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
d060: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
d070: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
d080: 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a  tify.c..  **.  *
d090: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
d0a0: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
d0b0: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
d0c0: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
d0d0: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
d0e0: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
d0f0: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
d100: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
d110: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
d120: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
d130: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
d140: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
d150: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
d160: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
d170: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
d180: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
d190: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
d1a0: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
d1b0: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
d1c0: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
d1d0: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
d1e0: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
d1f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
d200: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
d210: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
d220: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
d230: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
d240: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
d250: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
d260: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
d270: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
d280: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
d290: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
d2a0: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
d2b0: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
d2c0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
d2d0: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
d2e0: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
d2f0: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
d300: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
d310: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
d320: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
d330: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
d340: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73  ION.  sqlite3_us
d350: 65 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20  erauth auth;    
d360: 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68      /* User auth
d370: 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72  entication infor
d380: 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  mation */.#endif
d390: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  .};../*.** A mac
d3a0: 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74  ro to discover t
d3b0: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  he encoding of a
d3c0: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64   database..*/.#d
d3d0: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43  efine SCHEMA_ENC
d3e0: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
d3f0: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
d400: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
d410: 20 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65          ((db)->e
d420: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
d430: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
d440: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
d450: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
d460: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
d470: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
d480: 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  ):.**      SQLIT
d490: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
d4a0: 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59  == PAGER_FULLFSY
d4b0: 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  NC.**      SQLIT
d4c0: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
d4d0: 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55  == PAGER_CKPT_FU
d4e0: 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20  LLFSYNC.**      
d4f0: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
d500: 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41  l    == PAGER_CA
d510: 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65  CHE_SPILL.*/.#de
d520: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
d530: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
d540: 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  00001  /* OK to 
d550: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
d560: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
d570: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
d580: 65 46 6d 74 20 20 30 78 30 30 30 30 30 30 30 32  eFmt  0x00000002
d590: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
d5a0: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
d5b0: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
d5c0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
d5d0: 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30  ames   0x0000000
d5e0: 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20  4  /* Show full 
d5f0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20  column names on 
d600: 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e  SELECT */.#defin
d610: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
d620: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30  nc      0x000000
d630: 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  08  /* Use full 
d640: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
d650: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
d660: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
d670: 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 31 30  Sync  0x00000010
d680: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
d690: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
d6a0: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
d6b0: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
d6c0: 20 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20      0x00000020  
d6d0: 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70  /* OK to spill p
d6e0: 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64  ager cache */.#d
d6f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
d700: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
d710: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
d720: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
d730: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
d740: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
d750: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
d760: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
d770: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
d780: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
d790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d7b0: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
d7c0: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
d7d0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d800: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
d810: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
d820: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d830: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
d840: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
d850: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
d860: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
d870: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
d8a0: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
d8b0: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
d8c0: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
d8d0: 63 6b 73 20 20 20 30 78 30 30 30 30 30 32 30 30  cks   0x00000200
d8e0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
d8f0: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
d900: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
d910: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
d920: 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30 34 30  mmit   0x0000040
d930: 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d  0  /* READ UNCOM
d940: 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72 65 64  MITTED in shared
d950: 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e  -cache */.#defin
d960: 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f  e SQLITE_NoCkptO
d970: 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30 30 38  nClose  0x000008
d980: 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70  00  /* No checkp
d990: 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f  oint on close()/
d9a0: 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e  DETACH */.#defin
d9b0: 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  e SQLITE_Reverse
d9c0: 4f 72 64 65 72 20 20 20 30 78 30 30 30 30 31 30  Order   0x000010
d9d0: 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75  00  /* Reverse u
d9e0: 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73  nordered SELECTs
d9f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
da00: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20  TE_RecTriggers  
da10: 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a    0x00002000  /*
da20: 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76   Enable recursiv
da30: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
da40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72  efine SQLITE_For
da50: 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30  eignKeys    0x00
da60: 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72  004000  /* Enfor
da70: 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ce foreign key c
da80: 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23  onstraints  */.#
da90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75  define SQLITE_Au
daa0: 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30  toIndex      0x0
dab0: 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e 61 62  0008000  /* Enab
dac0: 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  le automatic ind
dad0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
dae0: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
daf0: 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30 30 30  sion  0x00010000
db00: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
db10: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
db20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
db30: 64 45 78 74 46 75 6e 63 20 20 20 20 30 78 30 30  dExtFunc    0x00
db40: 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  020000  /* Enabl
db50: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
db60: 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23  () SQL func */.#
db70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
db80: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
db90: 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0040000  /* True
dba0: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
dbb0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
dbc0: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
dbd0: 20 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20       0x00080000 
dbe0: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
dbf0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
dc00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
dc10: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
dc20: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44 69 73  00100000  /* Dis
dc30: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
dc40: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
dc50: 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65   SQLITE_CellSize
dc60: 43 6b 20 20 20 20 20 30 78 30 30 32 30 30 30 30  Ck     0x0020000
dc70: 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65  0  /* Check btre
dc80: 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20  e cell sizes on 
dc90: 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  load */.#define 
dca0: 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e  SQLITE_Fts3Token
dcb0: 69 7a 65 72 20 20 30 78 30 30 34 30 30 30 30 30  izer  0x00400000
dcc0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33    /* Enable fts3
dcd0: 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f  _tokenizer(2) */
dce0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dcf0: 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20 20 30  EnableQPSG     0
dd00: 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 51 75  x00800000  /* Qu
dd10: 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74 61 62  ery Planner Stab
dd20: 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65 65 2a  ility Guarantee*
dd30: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dd40: 5f 54 72 69 67 67 65 72 45 51 50 20 20 20 20 20  _TriggerEQP     
dd50: 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 53  0x01000000  /* S
dd60: 68 6f 77 20 74 72 69 67 67 65 72 20 45 58 50 4c  how trigger EXPL
dd70: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
dd80: 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20 75 73 65 64  /../* Flags used
dd90: 20 6f 6e 6c 79 20 69 66 20 64 65 62 75 67 67 69   only if debuggi
dda0: 6e 67 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ng */.#ifdef SQL
ddb0: 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69 6e  ITE_DEBUG.#defin
ddc0: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
ddd0: 65 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30  e       0x080000
dde0: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  00  /* Debug pri
ddf0: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
de00: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
de10: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
de20: 69 6e 67 20 20 20 20 30 78 31 30 30 30 30 30 30  ing    0x1000000
de30: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
de40: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
de50: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
de60: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
de70: 65 20 20 20 20 20 20 30 78 32 30 30 30 30 30 30  e      0x2000000
de80: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72  0  /* True to tr
de90: 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69  ace VDBE executi
dea0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
deb0: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
dec0: 61 63 65 20 30 78 34 30 30 30 30 30 30 30 20 20  ace 0x40000000  
ded0: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
dee0: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
def0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
df00: 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20  ITE_VdbeEQP     
df10: 20 20 20 30 78 38 30 30 30 30 30 30 30 20 20 2f     0x80000000  /
df20: 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20  * Debug EXPLAIN 
df30: 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 65  QUERY PLAN */.#e
df40: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
df50: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
df60: 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a  qlite3.mDbFlags.
df70: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
df80: 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 20 20  G_SchemaChange  
df90: 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f   0x0001  /* Unco
dfa0: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
dfb0: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
dfc0: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50 72 65  efine DBFLAG_Pre
dfd0: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
dfe0: 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  02  /* Preferenc
dff0: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
e000: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ncs */.#define D
e010: 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20 20 20  BFLAG_Vacuum    
e020: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
e030: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
e040: 41 43 55 55 4d 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ACUUM */../*.** 
e050: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
e060: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
e070: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
e080: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
e090: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
e0a0: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
e0b0: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
e0c0: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
e0d0: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
e0e0: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
e0f0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
e100: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e110: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
e120: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
e130: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
e140: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e150: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
e160: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
e170: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
e180: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
e190: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
e1a0: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
e1b0: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
e1c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e1d0: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
e1e0: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
e1f0: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
e200: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e210: 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30  DistinctOpt    0
e220: 78 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49  x0010   /* DISTI
e230: 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65  NCT using indexe
e240: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e250: 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e  ITE_CoverIdxScan
e260: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43     0x0020   /* C
e270: 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63  overing index sc
e280: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
e290: 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78  QLITE_OrderByIdx
e2a0: 4a 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a  Join 0x0040   /*
e2b0: 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69   ORDER BY of joi
e2c0: 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a  ns via index */.
e2d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
e2e0: 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78  ransitive     0x
e2f0: 30 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69  0080   /* Transi
e300: 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  tive constraints
e310: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e320: 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20  TE_OmitNoopJoin 
e330: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d    0x0100   /* Om
e340: 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73  it unused tables
e350: 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65   in joins */.#de
e360: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
e370: 74 4f 66 56 69 65 77 20 20 20 20 30 78 30 32 30  tOfView    0x020
e380: 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74  0   /* The count
e390: 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a  -of-view optimiz
e3a0: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
e3b0: 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69   SQLITE_CursorHi
e3c0: 6e 74 73 20 20 20 20 30 78 30 34 30 30 20 20 20  nts    0x0400   
e3d0: 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72  /* Add OP_Cursor
e3e0: 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  Hint opcodes */.
e3f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
e400: 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78  tat34         0x
e410: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54  0800   /* Use ST
e420: 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74  AT3 or STAT4 dat
e430: 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65  a */.   /* TH3 e
e440: 78 70 65 63 74 73 20 74 68 65 20 53 74 61 74 33  xpects the Stat3
e450: 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20  4  ^^^^^^ value 
e460: 74 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20 44  to be 0x0800.  D
e470: 6f 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a  on't change it *
e480: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e490: 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20  _AllOpts        
e4a0: 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20  0xffff   /* All 
e4b0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
e4c0: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66  ../*.** Macros f
e4d0: 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68  or testing wheth
e4e0: 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69  er or not optimi
e4f0: 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62  zations are enab
e500: 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e  led or disabled.
e510: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  .*/.#define Opti
e520: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
e530: 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64  (db, mask)  (((d
e540: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
e550: 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69  mask))!=0).#defi
e560: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
e570: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
e580: 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74     (((db)->dbOpt
e590: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30  Flags&(mask))==0
e5a0: 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  )../*.** Return 
e5b0: 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f  true if it OK to
e5c0: 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74   factor constant
e5d0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74   expressions int
e5e0: 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  o the initializa
e5f0: 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68  tion.** code. Th
e600: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
e610: 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72  Parse object for
e620: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
e630: 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  tor..*/.#define 
e640: 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29  ConstFactorOk(P)
e650: 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61   ((P)->okConstFa
e660: 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  ctor)../*.** Pos
e670: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
e680: 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69   the sqlite.magi
e690: 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20  c field..** The 
e6a0: 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61  numbers are obta
e6b0: 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  ined at random a
e6c0: 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69  nd have no speci
e6d0: 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65  al meaning, othe
e6e0: 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20  r.** than being 
e6f0: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e  distinct from on
e700: 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64  e another..*/.#d
e710: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e720: 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30  IC_OPEN     0xa0
e730: 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62  29a697  /* Datab
e740: 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23  ase is open */.#
e750: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
e760: 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39  GIC_CLOSED   0x9
e770: 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61  f3c2d33  /* Data
e780: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a  base is closed *
e790: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e7a0: 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20  _MAGIC_SICK     
e7b0: 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45  0x4b771290  /* E
e7c0: 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e  rror and awaitin
e7d0: 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69  g close */.#defi
e7e0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
e7f0: 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37  BUSY     0xf03b7
e800: 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65  906  /* Database
e810: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
e820: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
e830: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20  ITE_MAGIC_ERROR 
e840: 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f     0xb5357930  /
e850: 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  * An SQLITE_MISU
e860: 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  SE error occurre
e870: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
e880: 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45  ITE_MAGIC_ZOMBIE
e890: 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f     0x64cffc7f  /
e8a0: 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73  * Close with las
e8b0: 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73  t statement clos
e8c0: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  e */../*.** Each
e8d0: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
e8e0: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
e8f0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
e900: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
e910: 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62  cture.  For glob
e920: 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  al built-in func
e930: 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74  tions (ex: subst
e940: 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e  r(), max(), coun
e950: 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  t()).** a pointe
e960: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
e970: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
e980: 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  he sqlite3Builti
e990: 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63  nFunctions objec
e9a0: 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f  t..** For per-co
e9b0: 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61  nnection applica
e9c0: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e  tion-defined fun
e9d0: 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65  ctions, a pointe
e9e0: 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72  r to this.** str
e9f0: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
ea00: 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20  n the db->aHash 
ea10: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  hash table..**.*
ea20: 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20 66 69  * The u.pHash fi
ea30: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 74  eld is used by t
ea40: 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  he global built-
ea50: 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73  ins.  The u.pDes
ea60: 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64  tructor.** field
ea70: 20 69 73 20 75 73 65 64 20 62 79 20 70 65 72 2d   is used by per-
ea80: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64  connection app-d
ea90: 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f  ef functions..*/
eaa0: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20  .struct FuncDef 
eab0: 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20  {.  i8 nArg;    
eac0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
ead0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  er of arguments.
eae0: 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d    -1 means unlim
eaf0: 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75  ited */.  u16 fu
eb00: 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  ncFlags;       /
eb10: 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69  * Some combinati
eb20: 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e  on of SQLITE_FUN
eb30: 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  C_* */.  void *p
eb40: 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a  UserData;     /*
eb50: 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d   User data param
eb60: 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65  eter */.  FuncDe
eb70: 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  f *pNext;      /
eb80: 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20  * Next function 
eb90: 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a  with same name *
eba0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e  /.  void (*xSFun
ebb0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
ebc0: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
ebd0: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e  value**); /* fun
ebe0: 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f  c or agg-step */
ebf0: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
ec00: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
ec10: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
ec20: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20           /* Agg 
ec30: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
ec40: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
ec50: 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20  ;   /* SQL name 
ec60: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
ec70: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
ec80: 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68    FuncDef *pHash
ec90: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  ;      /* Next w
eca0: 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20  ith a different 
ecb0: 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d  name but the sam
ecc0: 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75  e hash */.    Fu
ecd0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
ece0: 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20  estructor;   /* 
ecf0: 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  Reference counte
ed00: 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  d destructor fun
ed10: 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ction */.  } u;.
ed20: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73  };../*.** This s
ed30: 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75  tructure encapsu
ed40: 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e  lates a user-fun
ed50: 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ction destructor
ed60: 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a   callback (as.**
ed70: 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e   configured usin
ed80: 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  g create_functio
ed90: 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65  n_v2()) and a re
eda0: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e  ference counter.
edb0: 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f   When.** create_
edc0: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73  function_v2() is
edd0: 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74   called to creat
ede0: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  e a function wit
edf0: 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a  h a destructor,.
ee00: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65  ** a single obje
ee10: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
ee20: 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75  is allocated. Fu
ee30: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65  ncDestructor.nRe
ee40: 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74  f is set to.** t
ee50: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
ee60: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
ee70: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
ee80: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
ee90: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
eea0: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
eeb0: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
eec0: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
eed0: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
eee0: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
eef0: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
ef00: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
ef10: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
ef20: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
ef30: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
ef40: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
ef50: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
ef60: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
ef70: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
ef80: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
ef90: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
efa0: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
efb0: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
efc0: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
efd0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
efe0: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
eff0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
f000: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
f010: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
f020: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
f030: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
f040: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
f050: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
f060: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
f070: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
f080: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
f090: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
f0a0: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
f0b0: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
f0c0: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
f0d0: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
f0e0: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
f0f0: 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a  YPEOFARG.  And.*
f100: 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  * SQLITE_FUNC_CO
f110: 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74  NSTANT must be t
f120: 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54  he same as SQLIT
f130: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e  E_DETERMINISTIC.
f140: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
f150: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
f160: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
f170: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
f180: 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
f190: 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
f1a0: 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
f1b0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
f1c0: 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20  NC_MINMAX    == 
f1d0: 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   NC_MinMaxAgg   
f1e0: 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41     == SF_MinMaxA
f1f0: 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  gg.**     SQLITE
f200: 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20  _FUNC_LENGTH    
f210: 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ==  OPFLAG_LENGT
f220: 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  HARG.**     SQLI
f230: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
f240: 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50    ==  OPFLAG_TYP
f250: 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51  EOFARG.**     SQ
f260: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
f270: 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44  NT  ==  SQLITE_D
f280: 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f  ETERMINISTIC fro
f290: 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20  m the API.**    
f2a0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
f2b0: 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f  MASK   depends o
f2c0: 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61  n SQLITE_UTF* ma
f2d0: 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a  cros in the API.
f2e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f2f0: 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20  E_FUNC_ENCMASK  
f300: 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45  0x0003 /* SQLITE
f310: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54  _UTF8, SQLITE_UT
f320: 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45  F16BE or UTF16LE
f330: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f340: 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20  TE_FUNC_LIKE    
f350: 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69   0x0004 /* Candi
f360: 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b  date for the LIK
f370: 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  E optimization *
f380: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f390: 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30  _FUNC_CASE     0
f3a0: 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65  x0008 /* Case-se
f3b0: 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70  nsitive LIKE-typ
f3c0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  e function */.#d
f3d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f3e0: 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30 31  C_EPHEM    0x001
f3f0: 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20  0 /* Ephemeral. 
f400: 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42   Delete with VDB
f410: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
f420: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
f430: 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69  L 0x0020 /* sqli
f440: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
f450: 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c  q() might be cal
f460: 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  led*/.#define SQ
f470: 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
f480: 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69     0x0040 /* Bui
f490: 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66  lt-in length() f
f4a0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
f4b0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  ne SQLITE_FUNC_T
f4c0: 59 50 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f  YPEOF   0x0080 /
f4d0: 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f  * Built-in typeo
f4e0: 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  f() function */.
f4f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f500: 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30  UNC_COUNT    0x0
f510: 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  100 /* Built-in 
f520: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
f530: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
f540: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
f550: 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69  CE 0x0200 /* Bui
f560: 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29  lt-in coalesce()
f570: 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a   or ifnull() */.
f580: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f590: 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30  UNC_UNLIKELY 0x0
f5a0: 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  400 /* Built-in 
f5b0: 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74  unlikely() funct
f5c0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
f5d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
f5e0: 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f  ANT 0x0800 /* Co
f5f0: 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69  nstant inputs gi
f600: 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75  ve a constant ou
f610: 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tput */.#define 
f620: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
f630: 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54  AX   0x1000 /* T
f640: 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e  rue for min() an
f650: 64 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  d max() aggregat
f660: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
f670: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
f680: 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c  G  0x2000 /* "Sl
f690: 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75  ow Change". Valu
f6a0: 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e  e constant durin
f6b0: 67 20 61 0a 20 20 20 20 20 20 20 20 20 20 20 20  g a.            
f6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6d0: 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c          ** singl
f6e0: 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20  e query - might 
f6f0: 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65  change over time
f700: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f710: 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59  TE_FUNC_AFFINITY
f720: 20 30 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74   0x4000 /* Built
f730: 2d 69 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66  -in affinity() f
f740: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
f750: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f  ne SQLITE_FUNC_O
f760: 46 46 53 45 54 20 20 20 30 78 38 30 30 30 20 2f  FFSET   0x8000 /
f770: 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74  * Built-in sqlit
f780: 65 5f 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74  e_offset() funct
f790: 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ion */../*.** Th
f7a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65  e following thre
f7b0: 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49  e macros, FUNCTI
f7c0: 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29  ON(), LIKEFUNC()
f7d0: 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29   and AGGREGATE()
f7e0: 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
f7f0: 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69  create the initi
f800: 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20  alizers for the 
f810: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
f820: 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43  es..**.**   FUNC
f830: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
f840: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
f850: 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  nc).**     Used 
f860: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
f870: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
f880: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
f890: 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20  tion zName.**   
f8a0: 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79    implemented by
f8b0: 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e   C function xFun
f8c0: 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e  c that accepts n
f8d0: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54  Arg arguments. T
f8e0: 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20  he.**     value 
f8f0: 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69  passed as iArg i
f900: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
f910: 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61  d*) and made ava
f920: 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73  ilable.**     as
f930: 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28   the user-data (
f940: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
f950: 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e  a()) for the fun
f960: 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20  ction. If.**    
f970: 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73   argument bNC is
f980: 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20   true, then the 
f990: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
f9a0: 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74  COLL flag is set
f9b0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54  ..**.**   VFUNCT
f9c0: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
f9d0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
f9e0: 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46  c).**     Like F
f9f0: 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69  UNCTION except i
fa00: 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49  t omits the SQLI
fa10: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
fa20: 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44   flag..**.**   D
fa30: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
fa40: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
fa50: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
fa60: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
fa70: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
fa80: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fa90: 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a  STANT flag and.*
faa0: 2a 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53  *     adds the S
fab0: 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
fac0: 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66  NG flag.  Used f
fad0: 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66  or date & time f
fae0: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20  unctions.**     
faf0: 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69  and functions li
fb00: 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f  ke sqlite_versio
fb10: 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61  n() that can cha
fb20: 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72  nge, but not dur
fb30: 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e  ing.**     a sin
fb40: 67 6c 65 20 71 75 65 72 79 2e 20 20 54 68 65 20  gle query.  The 
fb50: 69 41 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e  iArg is ignored.
fb60: 20 20 54 68 65 20 75 73 65 72 2d 64 61 74 61 20    The user-data 
fb70: 69 73 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a  is always set.**
fb80: 20 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70       to a NULL p
fb90: 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43  ointer.  The bNC
fba0: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
fbb0: 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20  t used..**.**   
fbc0: 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c  PURE_DATE(zName,
fbd0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
fbe0: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
fbf0: 55 73 65 64 20 66 6f 72 20 22 70 75 72 65 22 20  Used for "pure" 
fc00: 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69  date/time functi
fc10: 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20  ons, this macro 
fc20: 69 73 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f  is like DFUNCTIO
fc30: 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20  N.**     except 
fc40: 74 68 61 74 20 69 74 20 64 6f 65 73 20 73 65 74  that it does set
fc50: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
fc60: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e  _CONSTANT flags.
fc70: 20 20 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20    iArg is.**    
fc80: 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65   ignored and the
fc90: 20 75 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74   user-data for t
fca0: 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69  hese functions i
fcb0: 73 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20  s set to an .** 
fcc0: 20 20 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f      arbitrary no
fcd0: 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20  n-NULL pointer. 
fce0: 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74   The bNC paramet
fcf0: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  er is not used..
fd00: 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54  **.**   AGGREGAT
fd10: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
fd20: 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c  Arg, bNC, xStep,
fd30: 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20   xFinal).**     
fd40: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
fd50: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
fd60: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
fd70: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a  implemented by.*
fd80: 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63  *     the C func
fd90: 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20  tions xStep and 
fda0: 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73  xFinal. The firs
fdb0: 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72  t four parameter
fdc0: 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74  s.**     are int
fdd0: 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20  erpreted in the 
fde0: 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20  same way as the 
fdf0: 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65  first 4 paramete
fe00: 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e  rs to.**     FUN
fe10: 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20  CTION()..**.**  
fe20: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
fe30: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61   nArg, pArg, fla
fe40: 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  gs).**     Used 
fe50: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
fe60: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
fe70: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
fe80: 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20  tion zName.**   
fe90: 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
fea0: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
feb0: 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
fec0: 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a   by a call to C.
fed0: 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20  **     function 
fee0: 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65  likeFunc. Argume
fef0: 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20  nt pArg is cast 
ff00: 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e  to a (void *) an
ff10: 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76  d made.**     av
ff20: 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66  ailable as the f
ff30: 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74  unction user-dat
ff40: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
ff50: 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20  data()). The.** 
ff60: 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67      FuncDef.flag
ff70: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  s variable is se
ff80: 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70  t to the value p
ff90: 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61  assed as the fla
ffa0: 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65  gs.**     parame
ffb0: 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
ffc0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
ffd0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
ffe0: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
fff0: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
10000 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
10010 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
10020 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
10030 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
10040 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
10050 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
10060 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
10070 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
10080 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10090 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
100a0 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
100b0 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
100c0 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
100d0 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
100e0 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
100f0 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
10100 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46  {0} }.#define DF
10110 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10120 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10130 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10140 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
10150 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
10160 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46  8, \.   0, 0, xF
10170 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
10180 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55  {0} }.#define PU
10190 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  RE_DATE(zName, n
101a0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
101b0 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
101c0 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
101d0 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
101e0 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  8|SQLITE_FUNC_CO
101f0 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f  NSTANT, \.   (vo
10200 69 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66  id*)&sqlite3Conf
10210 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  ig, 0, xFunc, 0,
10220 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
10230 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32  define FUNCTION2
10240 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10250 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20  rg, bNC, xFunc, 
10260 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
10270 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e  {nArg,SQLITE_FUN
10280 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
10290 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
102a0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
102b0 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20  )|extraFlags,\. 
102c0 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
102d0 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
102e0 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
102f0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54  {0} }.#define ST
10300 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
10310 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
10320 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
10330 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10340 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
10350 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
10360 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
10370 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
10380 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
10390 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
103a0 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
103b0 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
103c0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
103d0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
103e0 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
103f0 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
10400 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
10410 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10420 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
10430 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
10440 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
10450 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67  Final) \.  {nArg
10460 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
10470 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
10480 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
10490 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
104a0 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78  arg), 0, xStep,x
104b0 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30  Final,#zName, {0
104c0 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  }}.#define AGGRE
104d0 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  GATE2(zName, nAr
104e0 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
104f0 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61  p, xFinal, extra
10500 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
10510 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
10520 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
10530 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
10540 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
10550 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
10560 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
10570 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f  ,#zName, {0}}../
10580 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
10590 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
105a0 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
105b0 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
105c0 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
105d0 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
105e0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
105f0 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
10600 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
10610 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
10620 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
10630 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
10640 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
10650 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
10660 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
10670 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
10680 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
10690 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
106a0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
106b0 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
106c0 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
106d0 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
106e0 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
106f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10700 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
10710 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36  olations */.  i6
10720 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
10730 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
10740 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
10750 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20  eferred imm fk. 
10760 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
10770 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
10780 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65           /* Pare
10790 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66  nt savepoint (if
107a0 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   any) */.};../*.
107b0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
107c0 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
107d0 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65   second paramete
107e0 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65  r to sqlite3Save
107f0 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20  point(),.** and 
10800 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  as the P1 argume
10810 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76  nt to the OP_Sav
10820 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
10830 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
10840 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20  AVEPOINT_BEGIN  
10850 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41      0.#define SA
10860 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
10870 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56     1.#define SAV
10880 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
10890 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68    2.../*.** Each
108a0 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28   SQLite module (
108b0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65  virtual table de
108c0 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66  finition) is def
108d0 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  ined by an.** in
108e0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
108f0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
10900 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  e, stored in the
10910 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65   sqlite3.aModule
10920 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  .** hash table..
10930 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  */.struct Module
10940 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74   {.  const sqlit
10950 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
10960 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  le;       /* Cal
10970 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a  lback pointers *
10980 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
10990 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
109a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
109b0 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
109c0 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
109d0 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20  void *pAux;     
109e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109f0 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73       /* pAux pas
10a00 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
10a10 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
10a20 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
10a30 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  d *);           
10a40 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72   /* Module destr
10a50 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
10a60 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54  /.  Table *pEpoT
10a70 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
10a80 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e           /* Epon
10a90 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20  ymous table for 
10aa0 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d  this module */.}
10ab0 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ;../*.** informa
10ac0 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
10ad0 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c  column of an SQL
10ae0 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69   table is held i
10af0 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  n an instance.**
10b00 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
10b10 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  re..*/.struct Co
10b20 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lumn {.  char *z
10b30 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
10b40 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
10b50 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65  , \000, then the
10b60 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20   type */.  Expr 
10b70 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44  *pDflt;     /* D
10b80 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
10b90 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
10ba0 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20   char *zColl;   
10bb0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
10bc0 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c  equence.  If NUL
10bd0 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75  L, use the defau
10be0 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75  lt */.  u8 notNu
10bf0 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f  ll;      /* An O
10c00 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64  E_ code for hand
10c10 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  ling a NOT NULL 
10c20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
10c30 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
10c40 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53   /* One of the S
10c50 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61  QLITE_AFF_... va
10c60 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45  lues */.  u8 szE
10c70 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  st;        /* Es
10c80 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
10c90 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f  value in this co
10ca0 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54  lumn. sizeof(INT
10cb0 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  )==1 */.  u8 col
10cc0 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f  Flags;     /* Bo
10cd0 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73  olean properties
10ce0 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20  .  See COLFLAG_ 
10cf0 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f  defines below */
10d00 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
10d10 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d  values for Colum
10d20 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23  n.colFlags:.*/.#
10d30 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50  define COLFLAG_P
10d40 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20  RIMKEY  0x0001  
10d50 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70    /* Column is p
10d60 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61  art of the prima
10d70 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
10d80 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  e COLFLAG_HIDDEN
10d90 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
10da0 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  A hidden column 
10db0 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  in a virtual tab
10dc0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  le */.#define CO
10dd0 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30  LFLAG_HASTYPE  0
10de0 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65  x0004    /* Type
10df0 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f   name follows co
10e00 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65  lumn name */.#de
10e10 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49  fine COLFLAG_UNI
10e20 51 55 45 20 20 20 30 78 30 30 30 38 20 20 20 20  QUE   0x0008    
10e30 2f 2a 20 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f  /* Column def co
10e40 6e 74 61 69 6e 73 20 22 55 4e 49 51 55 45 22 20  ntains "UNIQUE" 
10e50 6f 72 20 22 50 4b 22 20 2a 2f 0a 0a 2f 2a 0a 2a  or "PK" */../*.*
10e60 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53  * A "Collating S
10e70 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69  equence" is defi
10e80 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
10e90 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
10ea0 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
10eb0 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20  . Conceptually, 
10ec0 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a collating sequ
10ed0 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ence consists of
10ee0 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61   a name and.** a
10ef0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74   comparison rout
10f00 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ine that defines
10f10 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   the order of th
10f20 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a  at sequence..**.
10f30 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43  ** If CollSeq.xC
10f40 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d  mp is NULL, it m
10f50 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  eans that the.**
10f60 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
10f70 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  nce is undefined
10f80 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74  .  Indices built
10f90 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   on an undefined
10fa0 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
10fb0 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62  quence may not b
10fc0 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
10fd0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  n..*/.struct Col
10fe0 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lSeq {.  char *z
10ff0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
11000 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
11010 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11020 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  , UTF-8 encoded 
11030 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
11040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
11050 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64  xt encoding hand
11060 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f  led by xCmp() */
11070 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20  .  void *pUser; 
11080 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
11090 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
110a0 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  mp() */.  int (*
110b0 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xCmp)(void*,int,
110c0 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
110d0 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  t, const void*);
110e0 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
110f0 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74  void*);  /* Dest
11100 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72  ructor for pUser
11110 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
11120 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62  sort order can b
11130 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20  e either ASC or 
11140 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  DESC..*/.#define
11150 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20   SQLITE_SO_ASC  
11160 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20       0  /* Sort 
11170 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
11180 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
11190 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20  LITE_SO_DESC    
111a0 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    1  /* Sort in 
111b0 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
111c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
111d0 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d  E_SO_UNDEFINED -
111e0 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64  1 /* No sort ord
111f0 65 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a  er specified */.
11200 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
11210 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
11220 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
11230 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
11240 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
11250 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
11260 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
11270 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
11280 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
11290 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
112a0 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
112b0 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
112c0 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
112d0 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
112e0 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a  onsecutively..**
112f0 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74  .** But rather t
11300 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30  han start with 0
11310 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20   or 1, we begin 
11320 77 69 74 68 20 27 41 27 2e 20 20 54 68 61 74 20  with 'A'.  That 
11330 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c  way,.** when mul
11340 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74  tiple affinity t
11350 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65  ypes are concate
11360 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72  nated into a str
11370 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20  ing and.** used 
11380 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e  as the P4 operan
11390 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20  d, they will be 
113a0 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a  more readable..*
113b0 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74  *.** Note also t
113c0 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20  hat the numeric 
113d0 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65  types are groupe
113e0 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68  d together so th
113f0 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f  at testing.** fo
11400 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65  r a numeric type
11410 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d   is a single com
11420 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68  parison.  And th
11430 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66  e BLOB type is f
11440 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  irst..*/.#define
11450 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42   SQLITE_AFF_BLOB
11460 20 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65       'A'.#define
11470 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
11480 20 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65       'B'.#define
11490 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
114a0 52 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65  RIC  'C'.#define
114b0 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
114c0 47 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65  GER  'D'.#define
114d0 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
114e0 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e       'E'..#defin
114f0 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72  e sqlite3IsNumer
11500 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28  icAffinity(X)  (
11510 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  (X)>=SQLITE_AFF_
11520 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20  NUMERIC)../*.** 
11530 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
11540 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73  ASK values masks
11550 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69   off the signifi
11560 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a  cant bits of an.
11570 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75  ** affinity valu
11580 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
11590 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20  LITE_AFF_MASK   
115a0 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64    0x47../*.** Ad
115b0 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c  ditional bit val
115c0 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ues that can be 
115d0 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66  ORed with an aff
115e0 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a  inity without.**
115f0 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66   changing the af
11600 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  finity..**.** Th
11610 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
11620 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69   flag is a combi
11630 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51  nation of NULLEQ
11640 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e   and JUMPIFNULL.
11650 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e  .** It causes an
11660 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72   assert() to fir
11670 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  e if either oper
11680 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69  and to a compari
11690 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20  son.** operator 
116a0 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20  is NULL.  It is 
116b0 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e  added to certain
116c0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
116d0 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76  ators to.** prov
116e0 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61  e that the opera
116f0 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e  nds are always N
11700 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66  OT NULL..*/.#def
11710 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  ine SQLITE_KEEPN
11720 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a  ULL     0x08  /*
11730 20 55 73 65 64 20 62 79 20 76 65 63 74 6f 72 20   Used by vector 
11740 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66  == or <> */.#def
11750 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  ine SQLITE_JUMPI
11760 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a  FNULL   0x10  /*
11770 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72   jumps if either
11780 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
11790 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
117a0 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20  TE_STOREP2      
117b0 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72  0x20  /* Store r
117c0 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d  esult in reg[P2]
117d0 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d   rather than jum
117e0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  p */.#define SQL
117f0 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20  ITE_NULLEQ      
11800 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e   0x80  /* NULL=N
11810 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
11820 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20  QLITE_NOTNULL   
11830 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65     0x90  /* Asse
11840 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73  rt that operands
11850 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20   are never NULL 
11860 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  */../*.** An obj
11870 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
11880 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
11890 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62  each virtual tab
118a0 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a  le present in.**
118b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
118c0 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  hema..**.** If t
118d0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
118e0 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68  ma is shared, th
118f0 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20  en there is one 
11900 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
11910 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f  .** structure fo
11920 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
11930 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69  connection (sqli
11940 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20  te3*) that uses 
11950 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63  the shared.** sc
11960 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65  hema. This is be
11970 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62  cause each datab
11980 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72  ase connection r
11990 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20  equires its own 
119a0 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e  unique.** instan
119b0 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ce of the sqlite
119c0 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75  3_vtab* handle u
119d0 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
119e0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a  e virtual table.
119f0 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
11a00 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  n. sqlite3_vtab*
11a10 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74   handles can not
11a20 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65   be shared betwe
11a30 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  en.** database c
11a40 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e  onnections, even
11a50 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f   when the rest o
11a60 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
11a70 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65  database.** sche
11a80 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
11a90 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
11aa0 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
11ab0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
11ac0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
11ad0 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
11ae0 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
11af0 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
11b00 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
11b10 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
11b20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
11b30 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
11b40 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
11b50 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
11b60 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
11b70 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
11b80 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
11b90 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74  al tables.** wit
11ba0 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
11bb0 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
11bc0 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
11bd0 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20   the callers.** 
11be0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
11bf0 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64  se accesses need
11c00 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20   to be made via 
11c10 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
11c20 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
11c30 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
11c40 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
11c50 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
11c60 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
11c70 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
11c80 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
11c90 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
11ca0 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
11cb0 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
11cc0 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
11cd0 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
11ce0 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
11cf0 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
11d00 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
11d10 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
11d20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
11d30 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
11d40 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
11d50 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
11d60 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
11d70 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
11d80 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
11d90 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
11da0 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
11db0 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
11dc0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
11dd0 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
11de0 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
11df0 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
11e00 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
11e10 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
11e20 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
11e30 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
11e40 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
11e50 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
11e60 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
11e70 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
11e80 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
11e90 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
11ea0 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
11eb0 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
11ec0 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
11ed0 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  not.** deleted a
11ee0 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
11ef0 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
11f00 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
11f10 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  ()ed.** immediat
11f20 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68  ely. Instead, th
11f30 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f  ey are moved fro
11f40 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  m the Table.pVTa
11f50 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61  ble list to.** a
11f60 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69  nother linked li
11f70 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65  st headed by the
11f80 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
11f90 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74  nect member of t
11fa0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
11fb0 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75  ing sqlite3 stru
11fc0 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20  cture. They are 
11fd0 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69  then deleted/xDi
11fe0 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65  sconnected.** ne
11ff0 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d  xt time a statem
12000 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20  ent is prepared 
12010 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74  using said sqlit
12020 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e  e3*. This is don
12030 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65  e.** to avoid de
12040 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e  adlock issues in
12050 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65  volving multiple
12060 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
12070 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72  utexes..** Refer
12080 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f   to comments abo
12090 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69  ve function sqli
120a0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
120b0 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  t() for an.** ex
120c0 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20  planation as to 
120d0 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74  why it is safe t
120e0 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74  o add an entry t
120f0 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69  o an sqlite3.pDi
12100 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74  sconnect.** list
12110 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67   without holding
12120 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
12130 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  ng sqlite3.mutex
12140 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   mutex..**.** Th
12150 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a  e memory for obj
12160 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70  ects of this typ
12170 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f  e is always allo
12180 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  cated by.** sqli
12190 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
121a0 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
121b0 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
121c0 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
121d0 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61  s.** the first a
121e0 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  rgument..*/.stru
121f0 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71  ct VTable {.  sq
12200 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
12210 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
12220 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
12230 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
12240 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d  his table */.  M
12250 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20  odule *pMod;    
12260 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
12270 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d  ter to module im
12280 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
12290 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
122a0 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50  pVtab;      /* P
122b0 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69  ointer to vtab i
122c0 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74  nstance */.  int
122d0 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
122e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
122f0 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
12300 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a  this structure *
12310 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69  /.  u8 bConstrai
12320 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
12330 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
12340 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74  ints are support
12350 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76  ed */.  int iSav
12360 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
12370 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68    /* Depth of th
12380 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63  e SAVEPOINT stac
12390 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  k */.  VTable *p
123a0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
123b0 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b   /* Next in link
123c0 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f  ed list (see abo
123d0 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ve) */.};../*.**
123e0 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20   The schema for 
123f0 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61  each SQL table a
12400 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65  nd view is repre
12410 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
12420 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  .** by an instan
12430 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
12440 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
12450 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b  /.struct Table {
12460 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
12470 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
12480 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
12490 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e  view */.  Column
124a0 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f   *aCol;        /
124b0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
124c0 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
124d0 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  */.  Index *pInd
124e0 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  ex;       /* Lis
124f0 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73  t of SQL indexes
12500 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   on this table. 
12510 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
12520 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c  lect;     /* NUL
12530 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50  L for tables.  P
12540 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74  oints to definit
12550 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a  ion if a view. *
12560 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b  /.  FKey *pFKey;
12570 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b           /* Link
12580 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66  ed list of all f
12590 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74  oreign keys in t
125a0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  his table */.  c
125b0 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
125c0 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
125d0 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
125e0 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
125f0 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  mn */.  ExprList
12600 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20   *pCheck;    /* 
12610 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  All CHECK constr
12620 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20  aints */.       
12630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12640 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73  /*   ... also us
12650 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ed as column nam
12660 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57  e list in a VIEW
12670 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
12680 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
12690 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f  ot BTree page fo
126a0 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  r this table */.
126b0 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20    u32 nTabRef;  
126c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
126d0 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
126e0 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
126f0 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20  u32 tabFlags;   
12700 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
12710 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
12720 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20   i16 iPKey;     
12730 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
12740 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43  negative, use aC
12750 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65  ol[iPKey] as the
12760 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20   rowid */.  i16 
12770 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  nCol;           
12780 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
12790 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
127a0 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
127b0 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a  nRowLogEst;   /*
127c0 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
127d0 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
127e0 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
127f0 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  le */.  LogEst s
12800 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20  zTabRow;     /* 
12810 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
12820 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77  f each table row
12830 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66   in bytes */.#if
12840 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
12850 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67  E_COSTMULT.  Log
12860 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20  Est costMult;   
12870 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70    /* Cost multip
12880 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74  lier for using t
12890 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e  his table */.#en
128a0 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66  dif.  u8 keyConf
128b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
128c0 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
128d0 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
128e0 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
128f0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
12900 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
12910 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f  LE.  int addColO
12920 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66  ffset;    /* Off
12930 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41  set in CREATE TA
12940 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20  BLE stmt to add 
12950 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
12960 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
12970 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
12980 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d  ALTABLE.  int nM
12990 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f  oduleArg;      /
129a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
129b0 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
129c0 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ule */.  char **
129d0 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a  azModuleArg;  /*
129e0 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63   0: module 1: sc
129f0 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d  hema 2: vtab nam
12a00 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a  e 3...: args */.
12a10 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
12a20 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
12a30 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
12a40 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72  . */.#endif.  Tr
12a50 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
12a60 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72     /* List of tr
12a70 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e  iggers stored in
12a80 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63   pSchema */.  Sc
12a90 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
12aa0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61     /* Schema tha
12ab0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20  t contains this 
12ac0 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65  table */.  Table
12ad0 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20   *pNextZombie;  
12ae0 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50  /* Next on the P
12af0 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20  arse.pZombieTab 
12b00 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
12b10 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
12b20 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c   for Table.tabFl
12b30 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f  ags..**.** TF_OO
12b40 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20  OHidden applies 
12b50 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65  to tables or vie
12b60 77 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64  w that have hidd
12b70 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  en columns that 
12b80 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20  are.** followed 
12b90 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f  by non-hidden co
12ba0 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a  lumns.  Example:
12bb0 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41    "CREATE VIRTUA
12bc0 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a  L TABLE x USING.
12bd0 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45  ** vtab1(a HIDDE
12be0 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20  N, b);".  Since 
12bf0 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64  "b" is a non-hid
12c00 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22  den column but "
12c10 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a  a" is hidden,.**
12c20 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65   the TF_OOOHidde
12c30 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c  n attribute woul
12c40 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20  d apply in this 
12c50 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c  case.  Such tabl
12c60 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70  es require.** sp
12c70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64  ecial handling d
12c80 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f  uring INSERT pro
12c90 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66  cessing..*/.#def
12ca0 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20  ine TF_Readonly 
12cb0 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 20         0x0001   
12cc0 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79   /* Read-only sy
12cd0 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64  stem table */.#d
12ce0 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72  efine TF_Ephemer
12cf0 61 6c 20 20 20 20 20 20 20 30 78 30 30 30 32 20  al       0x0002 
12d00 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72     /* An ephemer
12d10 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
12d20 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72  ine TF_HasPrimar
12d30 79 4b 65 79 20 20 20 30 78 30 30 30 34 20 20 20  yKey   0x0004   
12d40 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20   /* Table has a 
12d50 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
12d60 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e  define TF_Autoin
12d70 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38  crement   0x0008
12d80 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
12d90 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
12da0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
12db0 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61  define TF_HasSta
12dc0 74 31 20 20 20 20 20 20 20 20 30 78 30 30 31 30  t1        0x0010
12dd0 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73      /* nRowLogEs
12de0 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74  t set from sqlit
12df0 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69  e_stat1 */.#defi
12e00 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
12e10 69 64 20 20 20 20 30 78 30 30 32 30 20 20 20 20  id    0x0020    
12e20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52  /* No rowid.  PR
12e30 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65  IMARY KEY is the
12e40 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
12e50 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
12e60 64 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20  d  0x0040    /* 
12e70 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20  No user-visible 
12e80 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a  "rowid" column *
12e90 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f  /.#define TF_OOO
12ea0 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 30  Hidden       0x0
12eb0 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66  080    /* Out-of
12ec0 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f  -Order hidden co
12ed0 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lumns */.#define
12ee0 20 54 46 5f 53 74 61 74 73 55 73 65 64 20 20 20   TF_StatsUsed   
12ef0 20 20 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a      0x0100    /*
12f00 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64   Query planner d
12f10 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65  ecisions affecte
12f20 64 20 62 79 0a 20 20 20 20 20 20 20 20 20 20 20  d by.           
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64            ** Ind
12f50 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d  ex.aiRowLogEst[]
12f60 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69   values */.#defi
12f70 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c  ne TF_HasNotNull
12f80 20 20 20 20 20 20 30 78 30 32 30 30 20 20 20 20        0x0200    
12f90 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20  /* Contains NOT 
12fa0 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73  NULL constraints
12fb0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20   */../*.** Test 
12fc0 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
12fd0 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
12fe0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
12ff0 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
13000 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
13010 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
13020 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
13030 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
13040 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
13050 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
13060 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
13070 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
13080 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
13090 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
130a0 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d  X)      ((X)->nM
130b0 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a  oduleArg).#else.
130c0 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
130d0 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65  ual(X)      0.#e
130e0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
130f0 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
13100 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68  if a column is h
13110 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61  idden.  IsOrdina
13120 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  ryHiddenColumn()
13130 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  .** only works f
13140 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74  or non-virtual t
13150 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20  ables (ordinary 
13160 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73  tables and views
13170 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61  ) and is.** alwa
13180 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20  ys false unless 
13190 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
131a0 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20  DDEN_COLUMNS is 
131b0 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a  defined.  The.**
131c0 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
131d0 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72  ) macro is gener
131e0 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23  al purpose..*/.#
131f0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
13200 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
13210 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69  COLUMNS).#  defi
13220 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
13230 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
13240 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
13250 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
13260 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
13270 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
13280 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f  umn(X) (((X)->co
13290 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
132a0 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c  _HIDDEN)!=0).#el
132b0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
132c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
132d0 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20  ABLE).#  define 
132e0 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
132f0 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d  )         (((X)-
13300 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
13310 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
13320 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
13330 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
13340 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64  (X) 0.#else.#  d
13350 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
13360 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
13370 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  0.#  define IsOr
13380 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
13390 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  mn(X) 0.#endif..
133a0 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62  ./* Does the tab
133b0 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20  le have a rowid 
133c0 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f  */.#define HasRo
133d0 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29  wid(X)     (((X)
133e0 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
133f0 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30  WithoutRowid)==0
13400 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c  ).#define Visibl
13410 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d  eRowid(X) (((X)-
13420 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e  >tabFlags & TF_N
13430 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d  oVisibleRowid)==
13440 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66  0)../*.** Each f
13450 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
13460 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74  raint is an inst
13470 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
13480 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
13490 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e  .**.** A foreign
134a0 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74   key is associat
134b0 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c  ed with two tabl
134c0 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20  es.  The "from" 
134d0 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  table is.** the 
134e0 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
134f0 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43  ins the REFERENC
13500 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  ES clause that c
13510 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69  reates the forei
13520 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20  gn.** key.  The 
13530 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68  "to" table is th
13540 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
13550 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46  named in the REF
13560 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a  ERENCES clause..
13570 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73  ** Consider this
13580 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20   example:.**.** 
13590 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
135a0 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61   ex1(.**       a
135b0 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
135c0 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62   KEY,.**       b
135d0 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41   INTEGER CONSTRA
135e0 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43  INT fk1 REFERENC
135f0 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20  ES ex2(x).**    
13600 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f   );.**.** For fo
13610 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c  reign key "fk1",
13620 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
13630 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65  is "ex1" and the
13640 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78   to-table is "ex
13650 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e  2"..** Equivalen
13660 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  t names:.**.**  
13670 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d     from-table ==
13680 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20   child-table.** 
13690 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d        to-table =
136a0 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a  = parent-table.*
136b0 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45  *.** Each REFERE
136c0 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65  NCES clause gene
136d0 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63  rates an instanc
136e0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
136f0 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
13700 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65  which is attache
13710 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61  d to the from-ta
13720 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62  ble.  The to-tab
13730 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73  le need not exis
13740 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72  t when.** the fr
13750 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61  om-table is crea
13760 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65  ted.  The existe
13770 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61  nce of the to-ta
13780 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b  ble is not check
13790 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69  ed..**.** The li
137a0 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74  st of all parent
137b0 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c  s for child Tabl
137c0 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58  e X is held at X
137d0 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20  .pFKey..**.** A 
137e0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c  list of all chil
137f0 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65  dren for a table
13800 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20   named Z (which 
13810 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65  might not even e
13820 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64  xist).** is held
13830 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48   in Schema.fkeyH
13840 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20  ash with a hash 
13850 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72  key of Z..*/.str
13860 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62  uct FKey {.  Tab
13870 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f  le *pFrom;     /
13880 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  * Table containi
13890 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ng the REFERENCE
138a0 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43  S clause (aka: C
138b0 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20  hild) */.  FKey 
138c0 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20  *pNextFrom;  /* 
138d0 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74  Next FKey with t
138e0 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d  he same in pFrom
138f0 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66  . Next parent of
13900 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72   pFrom */.  char
13910 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a   *zTo;        /*
13920 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74   Name of table t
13930 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e  hat the key poin
13940 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65  ts to (aka: Pare
13950 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  nt) */.  FKey *p
13960 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65  NextTo;    /* Ne
13970 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  xt with the same
13980 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64   zTo. Next child
13990 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b   of zTo. */.  FK
139a0 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20  ey *pPrevTo;    
139b0 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68  /* Previous with
139c0 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f   the same zTo */
139d0 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20  .  int nCol;    
139e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
139f0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
13a00 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56  s key */.  /* EV
13a10 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20  : R-30323-21917 
13a20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72  */.  u8 isDeferr
13a30 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ed;       /* Tru
13a40 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
13a50 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
13a60 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
13a70 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e   */.  u8 aAction
13a80 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [2];        /* O
13a90 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
13aa0 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
13ab0 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
13ac0 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
13ad0 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67  gger[2];/* Trigg
13ae0 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b  ers for aAction[
13af0 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  ] actions */.  s
13b00 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
13b10 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
13b20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46  of columns in pF
13b30 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  rom to columns i
13b40 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74  n zTo */.    int
13b50 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
13b60 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
13b70 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a  olumn in pFrom *
13b80 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c  /.    char *zCol
13b90 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
13ba0 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ame of column in
13bb0 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75   zTo.  If NULL u
13bc0 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  se PRIMARY KEY *
13bd0 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20  /.  } aCol[1];  
13be0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
13bf0 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
13c00 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20  of nCol columns 
13c10 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  */.};../*.** SQL
13c20 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
13c30 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  y different ways
13c40 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f   to resolve a co
13c50 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
13c60 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  r.  ROLLBACK pro
13c70 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
13c80 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  at a constraint 
13c90 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75  violation.** cau
13ca0 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ses the operatio
13cb0 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20  n in process to 
13cc0 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65  fail and for the
13cd0 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
13ce0 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f  tion.** to be ro
13cf0 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52  lled back.  ABOR
13d00 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  T processing mea
13d10 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ns the operation
13d20 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66   in process.** f
13d30 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69  ails and any pri
13d40 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  or changes from 
13d50 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69  that one operati
13d60 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75  on are backed ou
13d70 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72  t,.** but the tr
13d80 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
13d90 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46   rolled back.  F
13da0 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  AIL processing m
13db0 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65  eans that.** the
13dc0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
13dd0 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64  ogress stops and
13de0 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f   returns an erro
13df0 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69  r code.  But pri
13e00 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75  or.** changes du
13e10 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70  e to the same op
13e20 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20  eration are not 
13e30 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e  backed out and n
13e40 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63  o rollback.** oc
13e50 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65  curs.  IGNORE me
13e60 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72  ans that the par
13e70 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74  ticular row that
13e80 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73   caused the cons
13e90 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20  traint.** error 
13ea0 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20  is not inserted 
13eb0 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f  or updated.  Pro
13ec0 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
13ed0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a  s and no error.*
13ee0 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
13ef0 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68  REPLACE means th
13f00 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64  at preexisting d
13f10 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
13f20 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e  t caused.** a UN
13f30 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
13f40 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
13f50 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68  moved so that th
13f60 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a  e new insert or.
13f70 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72  ** update can pr
13f80 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69  oceed.  Processi
13f90 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
13fa0 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70   no error is rep
13fb0 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53  orted..**.** RES
13fc0 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20  TRICT, SETNULL, 
13fd0 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69  and CASCADE acti
13fe0 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74  ons apply only t
13ff0 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a  o foreign keys..
14000 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74  ** RESTRICT is t
14010 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54  he same as ABORT
14020 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66   for IMMEDIATE f
14030 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20  oreign keys and 
14040 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52  the.** same as R
14050 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45  OLLBACK for DEFE
14060 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e  RRED keys.  SETN
14070 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ULL means that t
14080 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
14090 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  y is set to NULL
140a0 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73  .  CASCADE means
140b0 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f   that a DELETE o
140c0 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a  r UPDATE of the.
140d0 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  ** referenced ta
140e0 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61  ble row is propa
140f0 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72  gated into the r
14100 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ow that holds th
14110 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79  e.** foreign key
14120 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ..**.** The foll
14130 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
14140 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
14150 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
14160 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
14170 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
14180 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
14190 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
141a0 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
141b0 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
141c0 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
141d0 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
141e0 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
141f0 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
14200 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
14210 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
14220 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
14230 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
14240 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
14250 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
14260 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
14270 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
14280 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
14290 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
142a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
142b0 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
142c0 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
142d0 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
142e0 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
142f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
14300 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
14310 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
14320 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
14330 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
14340 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
14350 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
14360 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
14370 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
14380 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
14390 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
143a0 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
143b0 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
143c0 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
143d0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
143e0 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
143f0 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
14400 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
14410 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
14420 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
14430 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
14440 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
14450 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
14460 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  10  /* Do whatev
14470 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
14480 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
14490 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
144a0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
144b0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
144c0 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
144d0 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
144e0 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
144f0 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
14500 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
14510 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
14520 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78  of the two index
14530 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   keys..**.** Not
14540 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65  e that aSortOrde
14550 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20  r[] and aColl[] 
14560 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c  have nField+1 sl
14570 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ots.  There.** a
14580 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20  re nField slots 
14590 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  for the columns 
145a0 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e  of an index then
145b0 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a   one extra slot.
145c0 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  ** for the rowid
145d0 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   at the end..*/.
145e0 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b  struct KeyInfo {
145f0 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20  .  u32 nRef;    
14600 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14610 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74   of references t
14620 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f  o this KeyInfo o
14630 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e  bject */.  u8 en
14640 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
14650 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
14660 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
14670 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
14680 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46 69 65  */.  u16 nKeyFie
14690 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ld;      /* Numb
146a0 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e  er of key column
146b0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
146c0 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69 65 6c  /.  u16 nAllFiel
146d0 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c  d;      /* Total
146e0 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75 64   columns, includ
146f0 69 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f 74 68  ing key plus oth
14700 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ers */.  sqlite3
14710 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
14720 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  The database con
14730 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  nection */.  u8 
14740 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
14750 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66   /* Sort order f
14760 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20  or each column. 
14770 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43  */.  CollSeq *aC
14780 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c  oll[1];  /* Coll
14790 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66  ating sequence f
147a0 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  or each term of 
147b0 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f  the key */.};../
147c0 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74  *.** This object
147d0 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
147e0 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20 70  which has been p
147f0 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
14800 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65  ndividual.** fie
14810 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72  lds, for the pur
14820 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61  poses of doing a
14830 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a   comparison..**.
14840 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
14850 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
14860 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
14870 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
14880 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
14890 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
148a0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
148b0 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
148c0 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
148d0 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
148e0 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
148f0 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
14900 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
14910 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
14920 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
14930 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
14940 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
14950 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
14960 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  e..**.** An inst
14970 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
14980 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61 20  ect serves as a 
14990 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20  "key" for doing 
149a0 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61  a search on.** a
149b0 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20  n index b+tree. 
149c0 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20  The goal of the 
149d0 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e  search is to fin
149e0 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  d the entry that
149f0 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f  .** is closed to
14a00 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69 62   the key describ
14a10 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63  ed by this objec
14a20 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20  t.  This object 
14a30 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75  might hold.** ju
14a40 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
14a50 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d  he key.  The num
14a60 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73  ber of fields is
14a70 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65   given by.** pKe
14a80 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a  yInfo->nField..*
14a90 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20  *.** The r1 and 
14aa0 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74 68  r2 fields are th
14ab0 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75  e values to retu
14ac0 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20 69  rn if this key i
14ad0 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f  s less than.** o
14ae0 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 61  r greater than a
14af0 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72 65   key in the btre
14b00 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
14b10 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d    These are norm
14b20 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b  ally.** -1 and +
14b30 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  1 respectively, 
14b40 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76  but might be inv
14b50 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20  erted to +1 and 
14b60 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65 65  -1 if the b-tree
14b70 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f  .** is in DESC o
14b80 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  rder..**.** The 
14b90 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
14ba0 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c  unctions actuall
14bb0 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74  y return default
14bc0 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66 69  _rc when they fi
14bd0 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20  nd.** an equals 
14be0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66  comparison.  def
14bf0 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d  ault_rc can be -
14c00 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66  1, 0, or +1.  If
14c10 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75   there are.** mu
14c20 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69  ltiple entries i
14c30 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69 74  n the b-tree wit
14c40 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28  h the same key (
14c50 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e  when only lookin
14c60 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73  g.** at the firs
14c70 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  t pKeyInfo->nFie
14c80 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75  lds,) then defau
14c90 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74  lt_rc can be set
14ca0 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75   to -1 to.** cau
14cb0 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
14cc0 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d   find the last m
14cd0 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63  atch, or +1 to c
14ce0 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
14cf0 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66  to.** find the f
14d00 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a  irst match..**.*
14d10 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
14d20 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77  ison functions w
14d30 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74  ill set eqSeen t
14d40 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20 65  o true if they e
14d50 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65  ver.** get and e
14d60 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65  qual results whe
14d70 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73  n comparing this
14d80 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61 20   structure to a 
14d90 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a  b-tree record..*
14da0 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72  * When default_r
14db0 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68  c!=0, the search
14dc0 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e   might end up on
14dd0 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65   the record imme
14de0 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72  diately.** befor
14df0 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  e the first matc
14e00 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  h or immediately
14e10 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20   after the last 
14e20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65  match.  The.** e
14e30 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c  qSeen field will
14e40 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68 65   indicate whethe
14e50 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63  r or not an exac
14e60 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20 69  t match exists i
14e70 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e  n the.** b-tree.
14e80 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
14e90 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
14ea0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
14eb0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
14ec0 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
14ed0 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d  formation */.  M
14ee0 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
14ef0 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
14f00 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
14f10 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14f20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
14f30 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
14f40 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
14f50 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
14f60 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
14f70 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
14f80 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
14f90 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
14fa0 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
14fb0 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
14fc0 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31  OMEM) */.  i8 r1
14fd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
14fe0 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
14ff0 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68 73 29  n if (lhs < rhs)
15000 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20   */.  i8 r2;    
15010 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
15020 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
15030 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20  (lhs > rhs) */. 
15040 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20   u8 eqSeen;     
15050 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
15060 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70  an equality comp
15070 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20  arison has been 
15080 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a  seen */.};.../*.
15090 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65  ** Each SQL inde
150a0 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  x is represented
150b0 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
150c0 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
150d0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
150e0 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
150f0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
15100 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
15110 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61   to be indexed a
15120 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  re described.** 
15130 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b  by the aiColumn[
15140 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20  ] field of this 
15150 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
15160 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65  example, suppose
15170 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20  .** we have the 
15180 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
15190 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a  and index:.**.**
151a0 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
151b0 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32  E Ex1(c1 int, c2
151c0 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a   int, c3 text);.
151d0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  **     CREATE IN
151e0 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63  DEX Ex2 ON Ex1(c
151f0 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20  3,c1);.**.** In 
15200 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
15210 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45  ure describing E
15220 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61  x1, nCol==3 beca
15230 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a  use there are.**
15240 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69   three columns i
15250 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e  n the table.  In
15260 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63   the Index struc
15270 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a  ture describing.
15280 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d  ** Ex2, nColumn=
15290 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68  =2 since 2 of th
152a0 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45  e 3 columns of E
152b0 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a  x1 are indexed..
152c0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
152d0 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20  aiColumn is {2, 
152e0 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d  0}.  aiColumn[0]
152f0 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 0a  ==2 because the.
15300 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
15310 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
15320 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
15330 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
15340 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
15350 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
15360 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
15370 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
15380 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
15390 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
153a0 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
153b0 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
153c0 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
153d0 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
153e0 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
153f0 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
15400 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
15410 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
15420 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
15430 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
15440 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
15450 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
15460 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
15470 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
15480 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
15490 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
154a0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
154b0 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
154c0 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
154d0 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74  ution.** algorit
154e0 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
154f0 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
15500 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
15510 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
15520 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a  ** element..**.*
15530 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20  * While parsing 
15540 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  a CREATE TABLE o
15550 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  r CREATE INDEX s
15560 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65  tatement in orde
15570 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65  r to.** generate
15580 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f   VDBE code (as o
15590 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e  pposed to parsin
155a0 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20  g one read from 
155b0 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  an sqlite_master
155c0 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72  .** table as par
155d0 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20  t of parsing an 
155e0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
155f0 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73  e schema), trans
15600 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a  ient instances.*
15610 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
15620 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74  ure may be creat
15630 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
15640 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20   the Index.tnum 
15650 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75  variable is.** u
15660 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
15670 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44   address of a VD
15680 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  BE instruction, 
15690 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70  not a database p
156a0 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69  age.** number (i
156b0 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64  t cannot - the d
156c0 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20  atabase page is 
156d0 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e  not allocated un
156e0 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20  til the VDBE.** 
156f0 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75  program is execu
15700 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72  ted). See conver
15710 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54  tToWithoutRowidT
15720 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69  able() for detai
15730 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  ls..*/.struct In
15740 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
15750 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
15760 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
15770 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
15780 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
15790 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
157a0 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
157b0 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
157c0 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
157d0 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
157e0 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
157f0 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
15800 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
15810 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
15820 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
15830 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
15840 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
15850 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
15860 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
15870 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
15880 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
15890 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
158a0 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
158b0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
158c0 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
158d0 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
158e0 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
158f0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
15900 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
15910 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
15920 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
15930 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
15940 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
15950 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
15960 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
15970 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f  lse==ASC */.  co
15980 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  nst char **azCol
15990 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  l;     /* Array 
159a0 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
159b0 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
159c0 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
159d0 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
159e0 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
159f0 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
15a00 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70  indices */.  Exp
15a10 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b  rList *aColExpr;
15a20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
15a30 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
15a40 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
15a50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
15a60 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
15a70 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
15a80 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
15a90 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
15aa0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
15ab0 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
15ac0 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
15ad0 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
15ae0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15af0 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
15b00 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
15b10 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
15b20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15b30 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
15b40 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
15b50 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
15b60 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
15b70 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
15b80 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
15b90 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
15ba0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78  /.  unsigned idx
15bb0 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20  Type:2;      /* 
15bc0 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
15bd0 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
15be0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
15bf0 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
15c00 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
15c10 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
15c20 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
15c30 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
15c40 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
15c50 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
15c60 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
15c70 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
15c80 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
15c90 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
15ca0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
15cb0 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
15cc0 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
15cd0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
15ce0 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
15cf0 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
15d00 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
15d10 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
15d20 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f  oSkipScan:1;   /
15d30 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20  * Do not try to 
15d40 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66  use skip-scan if
15d50 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67   true */.  unsig
15d60 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20  ned hasStat1:1; 
15d70 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45      /* aiRowLogE
15d80 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66  st values come f
15d90 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
15da0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
15db0 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20 20 20 2f  NoQuery:1;     /
15dc0 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 74 68 69  * Do not use thi
15dd0 73 20 69 6e 64 65 78 20 74 6f 20 6f 70 74 69 6d  s index to optim
15de0 69 7a 65 20 71 75 65 72 69 65 73 20 2a 2f 0a 23  ize queries */.#
15df0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
15e00 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
15e10 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
15e20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15e30 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
15e40 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
15e50 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
15e60 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
15e70 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
15e80 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
15e90 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
15ea0 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
15eb0 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
15ec0 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
15ed0 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
15ee0 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
15ef0 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
15f00 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
15f10 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
15f20 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
15f30 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
15f40 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
15f50 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
15f60 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
15f70 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
15f80 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
15f90 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
15fa0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
15fb0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
15fc0 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  if.};../*.** All
15fd0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
15fe0 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f  Index.idxType.*/
15ff0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
16000 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20  IDXTYPE_APPDEF  
16010 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74      0   /* Creat
16020 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
16030 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
16040 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
16050 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20  UNIQUE      1   
16060 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20  /* Implements a 
16070 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
16080 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
16090 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
160a0 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49  ARYKEY  2   /* I
160b0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
160c0 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20  Y for the table 
160d0 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  */../* Return tr
160e0 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
160f0 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69   a PRIMARY KEY i
16100 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
16110 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  IsPrimaryKeyInde
16120 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54  x(X)  ((X)->idxT
16130 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54  ype==SQLITE_IDXT
16140 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a  YPE_PRIMARYKEY).
16150 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
16160 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
16170 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a  UNIQUE index */.
16180 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65  #define IsUnique
16190 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28  Index(X)      ((
161a0 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f  X)->onError!=OE_
161b0 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e  None)../* The In
161c0 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76  dex.aiColumn[] v
161d0 61 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c  alues are normal
161e0 6c 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ly positive inte
161f0 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65  ger.  But.** the
16200 72 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61  re are some nega
16210 74 69 76 65 20 76 61 6c 75 65 73 20 74 68 61 74  tive values that
16220 20 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65   have special me
16230 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e  aning:.*/.#defin
16240 65 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28  e XN_ROWID     (
16250 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78  -1)     /* Index
16260 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65  ed column is the
16270 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
16280 65 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28  e XN_EXPR      (
16290 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78  -2)     /* Index
162a0 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20  ed column is an 
162b0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f  expression */../
162c0 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65  *.** Each sample
162d0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
162e0 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
162f0 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
16300 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73   in memory.** us
16310 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20  ing a structure 
16320 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53  of this type.  S
16330 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
16340 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
16350 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20  he.** analyze.c 
16360 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20  source file for 
16370 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
16380 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
16390 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a  t IndexSample {.
163a0 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20    void *p;      
163b0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
163c0 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64  o sampled record
163d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
163e0 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
163f0 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74  of record in byt
16400 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  es */.  tRowcnt 
16410 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74  *anEq;    /* Est
16420 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
16430 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65   where the key e
16440 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c  quals this sampl
16450 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
16460 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anLt;    /* Est.
16470 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
16480 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73  where key is les
16490 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
164a0 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
164b0 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74  *anDLt;   /* Est
164c0 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74  . number of dist
164d0 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74  inct keys less t
164e0 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
164f0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
16500 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
16510 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
16520 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
16530 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
16540 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
16550 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
16560 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
16570 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ion..**.** Note 
16580 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68  if Token.z==0 th
16590 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64  en Token.dyn and
165a0 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64   Token.n are und
165b0 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61  efined and.** ma
165c0 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d  y contain random
165d0 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74   values.  Do not
165e0 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70   make any assump
165f0 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65  tions about Toke
16600 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b  n.dyn.** and Tok
16610 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e  en.n when Token.
16620 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  z==0..*/.struct 
16630 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20  Token {.  const 
16640 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20  char *z;     /* 
16650 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65  Text of the toke
16660 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72  n.  Not NULL-ter
16670 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e  minated! */.  un
16680 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20  signed int n;   
16690 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68   /* Number of ch
166a0 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73  aracters in this
166b0 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   token */.};../*
166c0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
166d0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
166e0 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
166f0 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
16700 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
16710 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74  e for a SELECT t
16720 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67  hat contains agg
16730 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
16740 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e  ..**.** If Expr.
16750 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d  op==TK_AGG_COLUM
16760 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43  N or TK_AGG_FUNC
16770 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70  TION then Expr.p
16780 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20  AggInfo is a.** 
16790 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
167a0 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20  structure.  The 
167b0 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  Expr.iColumn fie
167c0 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ld is the index 
167d0 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43  in.** AggInfo.aC
167e0 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e  ol[] or AggInfo.
167f0 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72  aFunc[] of infor
16800 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
16810 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
16820 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e  e for that node.
16830 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70  .**.** AggInfo.p
16840 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49  GroupBy and AggI
16850 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20  nfo.aFunc.pExpr 
16860 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20  point to fields 
16870 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72  within the.** or
16880 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74  iginal Select st
16890 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73  ructure that des
168a0 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43  cribes the SELEC
168b0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  T statement.  Th
168c0 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f  ese.** fields do
168d0 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20   not need to be 
168e0 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c  freed when deall
168f0 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49  ocating the AggI
16900 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  nfo structure..*
16910 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  /.struct AggInfo
16920 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f   {.  u8 directMo
16930 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
16940 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67  Direct rendering
16950 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65   mode means take
16960 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20   data directly. 
16970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16980 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d           ** from
16990 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72   source tables r
169a0 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20  ather than from 
169b0 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a  accumulators */.
169c0 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49    u8 useSortingI
169d0 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20  dx;       /* In 
169e0 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66  direct mode, ref
169f0 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69  erence the sorti
16a00 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a  ng index rather.
16a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61            ** tha
16a30 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
16a40 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  le */.  int sort
16a50 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20  ingIdx;         
16a60 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
16a70 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20   of the sorting 
16a80 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73  index */.  int s
16a90 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20  ortingIdxPTab;  
16aa0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
16ab0 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61  ber of pseudo-ta
16ac0 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f  ble */.  int nSo
16ad0 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20  rtingColumn;    
16ae0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
16af0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72  lumns in the sor
16b00 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
16b10 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67  int mnReg, mxReg
16b20 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65  ;       /* Range
16b30 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
16b40 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c  located for aCol
16b50 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20   and aFunc */.  
16b60 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
16b70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67  By;     /* The g
16b80 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a  roup by clause *
16b90 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
16ba0 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46  fo_col {    /* F
16bb0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75  or each column u
16bc0 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61  sed in source ta
16bd0 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c  bles */.    Tabl
16be0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
16bf0 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74       /* Source t
16c00 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
16c10 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
16c20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
16c30 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75  umber of the sou
16c40 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
16c50 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
16c60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c            /* Col
16c70 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69  umn number withi
16c80 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
16c90 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53  le */.    int iS
16ca0 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20  orterColumn;    
16cb0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
16cc0 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69  ber in the sorti
16cd0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  ng index */.    
16ce0 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
16cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
16d00 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
16d10 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
16d20 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72  ator */.    Expr
16d30 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
16d40 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67       /* The orig
16d50 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  inal expression 
16d60 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20  */.  } *aCol;.  
16d70 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  int nColumn;    
16d80 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16d90 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65  r of used entrie
16da0 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20  s in aCol[] */. 
16db0 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f   int nAccumulato
16dc0 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
16dd0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  er of columns th
16de0 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20  at show through 
16df0 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20  to the output.. 
16e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e10 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69           ** Addi
16e20 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61  tional columns a
16e30 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20  re used only as 
16e40 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20  parameters to.  
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65          ** aggre
16e70 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
16e80 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
16e90 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46  fo_func {   /* F
16ea0 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74  or each aggregat
16eb0 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
16ec0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
16ed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
16ee0 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e  pression encodin
16ef0 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  g the function *
16f00 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  /.    FuncDef *p
16f10 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f  Func;          /
16f20 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20  * The aggregate 
16f30 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
16f40 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ntation */.    i
16f50 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
16f60 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
16f70 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
16f80 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
16f90 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  tor */.    int i
16fa0 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20  Distinct;       
16fb0 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c      /* Ephemeral
16fc0 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65   table used to e
16fd0 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20  nforce DISTINCT 
16fe0 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20  */.  } *aFunc;. 
16ff0 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20   int nFunc;     
17000 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17010 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
17020 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a   aFunc[] */.};..
17030 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
17040 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69  pe ynVar is a si
17050 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69  gned integer, ei
17060 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33  ther 16-bit or 3
17070 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c  2-bit..** Usuall
17080 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e  y it is 16-bits.
17090 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f    But if SQLITE_
170a0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
170b0 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a  BER is greater.*
170c0 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20  * than 32767 we 
170d0 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20  have to make it 
170e0 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20  32-bit.  16-bit 
170f0 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63  is preferred bec
17100 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20  ause.** it uses 
17110 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74  less memory in t
17120 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20  he Expr object, 
17130 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d  which is a big m
17140 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e  emory user.** in
17150 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f   systems with lo
17160 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73  ts of prepared s
17170 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20  tatements.  And 
17180 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  few applications
17190 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68  .** need more th
171a0 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32  an about 10 or 2
171b0 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75  0 variables.  Bu
171c0 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75  t some extreme u
171d0 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20  sers want.** to 
171e0 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74  have prepared st
171f0 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76  atements with ov
17200 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c  er 32767 variabl
17210 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d  es, and for them
17220 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69  .** the option i
17230 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20  s available (at 
17240 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a  compile-time)..*
17250 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
17260 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
17270 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20  <=32767.typedef 
17280 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65  i16 ynVar;.#else
17290 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56  .typedef int ynV
172a0 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ar;.#endif../*.*
172b0 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61  * Each node of a
172c0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
172d0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69  the parse tree i
172e0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
172f0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
17300 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f  re..**.** Expr.o
17310 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e  p is the opcode.
17320 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72   The integer par
17330 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  ser token codes 
17340 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73  are reused.** as
17350 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46   opcodes here. F
17360 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
17370 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54  parser defines T
17380 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e  K_GE to be an in
17390 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65  teger.** code re
173a0 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22  presenting the "
173b0 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68  >=" operator. Th
173c0 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  is same integer 
173d0 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a  code is reused.*
173e0 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74  * to represent t
173f0 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d  he greater-than-
17400 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72  or-equal-to oper
17410 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72  ator in the expr
17420 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a  ession.** tree..
17430 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
17440 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
17450 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e  L literal (TK_IN
17460 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c  TEGER, TK_FLOAT,
17470 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20   TK_BLOB,.** or 
17480 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e  TK_STRING), then
17490 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
174a0 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66  ains the text of
174b0 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c   the SQL literal
174c0 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  . If.** the expr
174d0 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69  ession is a vari
174e0 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c  able (TK_VARIABL
174f0 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  E), then Expr.to
17500 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
17510 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  .** variable nam
17520 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74  e. Finally, if t
17530 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
17540 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
17550 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a   (TK_FUNCTION),.
17560 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ** then Expr.tok
17570 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
17580 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
17590 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  tion..**.** Expr
175a0 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72  .pRight and Expr
175b0 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c  .pLeft are the l
175c0 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75  eft and right su
175d0 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20  bexpressions of 
175e0 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72  a.** binary oper
175f0 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20  ator. Either or 
17600 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c  both may be NULL
17610 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  ..**.** Expr.x.p
17620 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f  List is a list o
17630 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74  f arguments if t
17640 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
17650 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
17660 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72  ,.** a CASE expr
17670 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20  ession or an IN 
17680 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
17690 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
176a0 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e   (<y>, <z>...)".
176b0 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  .** Expr.x.pSele
176c0 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68  ct is used if th
176d0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
176e0 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20  a sub-select or 
176f0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  an expression of
17700 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c  .** the form "<l
17710 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e  hs> IN (SELECT .
17720 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f  ..)". If the EP_
17730 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73  xIsSelect bit is
17740 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45   set in the.** E
17750 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
17760 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c  then Expr.x.pSel
17770 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74  ect is valid. Ot
17780 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e  herwise, Expr.x.
17790 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69  pList is.** vali
177a0 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72  d..**.** An expr
177b0 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
177c0 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72  rm ID or ID.ID r
177d0 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d  efers to a colum
177e0 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  n in a table..**
177f0 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73   For such expres
17800 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69  sions, Expr.op i
17810 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55  s set to TK_COLU
17820 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62  MN and Expr.iTab
17830 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74  le is.** the int
17840 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62  eger cursor numb
17850 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72  er of a VDBE cur
17860 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
17870 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a  that table and.*
17880 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69  * Expr.iColumn i
17890 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  s the column num
178a0 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63  ber for the spec
178b0 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66  ific column.  If
178c0 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69   the.** expressi
178d0 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20  on is used as a 
178e0 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67  result in an agg
178f0 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74  regate SELECT, t
17900 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
17910 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20   is also stored 
17920 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67  in the Expr.iAgg
17930 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61   column in the a
17940 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74  ggregate so that
17950 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63  .** it can be ac
17960 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c  cessed after all
17970 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20   aggregates are 
17980 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  computed..**.** 
17990 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
179a0 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20  n is an unbound 
179b0 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20  variable marker 
179c0 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  (a question mark
179d0 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f  .** character '?
179e0 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  ' in the origina
179f0 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20  l SQL) then the 
17a00 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64  Expr.iTable hold
17a10 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e  s the index.** n
17a20 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
17a30 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
17a40 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17a50 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
17a60 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
17a70 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
17a80 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
17a90 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
17aa0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
17ab0 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
17ac0 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
17ad0 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
17ae0 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
17af0 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
17b00 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
17b10 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
17b20 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
17b30 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
17b40 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
17b50 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
17b60 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
17b70 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
17b80 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
17b90 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
17ba0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
17bb0 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f  xpr is of type O
17bc0 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  P_Column, and th
17bd0 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65  e table it is se
17be0 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20  lecting from.** 
17bf0 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20  is a disk table 
17c00 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70  or the "old.*" p
17c10 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65  seudo-table, the
17c20 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f  n pTab points to
17c30 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
17c40 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69  nding table defi
17c50 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c  nition..**.** AL
17c60 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a  LOCATION NOTES:.
17c70 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63  **.** Expr objec
17c80 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74  ts can use a lot
17c90 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
17ca0 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68   in database sch
17cb0 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70  ema.  To.** help
17cc0 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72   reduce memory r
17cd0 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d  equirements, som
17ce0 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f  etimes an Expr o
17cf0 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a  bject will be.**
17d00 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64   truncated.  And
17d10 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
17d20 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
17d30 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d  allocations, som
17d40 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72  etimes.** two or
17d50 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63   more Expr objec
17d60 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  ts will be store
17d70 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65  d in a single me
17d80 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
17d90 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74  .** together wit
17da0 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74  h Expr.zToken st
17db0 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rings..**.** If 
17dc0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61  the EP_Reduced a
17dd0 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  nd EP_TokenOnly 
17de0 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68  flags are set wh
17df0 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62  en.** an Expr ob
17e00 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65  ject is truncate
17e10 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75  d.  When EP_Redu
17e20 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ced is set, then
17e30 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c   all.** the chil
17e40 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69  d Expr objects i
17e50 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74  n the Expr.pLeft
17e60 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74   and Expr.pRight
17e70 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65   subtrees.** are
17e80 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
17e90 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  n the same memor
17ea0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  y allocation.  N
17eb0 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  ote, however, th
17ec0 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65  at.** the subtre
17ed0 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69  es in Expr.x.pLi
17ee0 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65  st or Expr.x.pSe
17ef0 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20  lect are always 
17f00 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c  separately.** al
17f10 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c  located, regardl
17f20 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
17f30 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64  r not EP_Reduced
17f40 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75   is set..*/.stru
17f50 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f  ct Expr {.  u8 o
17f60 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
17f70 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20     /* Operation 
17f80 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
17f90 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72  s node */.  char
17fa0 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
17fb0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
17fc0 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ty of the column
17fd0 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63   or 0 if not a c
17fe0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66  olumn */.  u32 f
17ff0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
18000 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
18010 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
18020 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
18030 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
18040 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
18050 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
18060 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
18070 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
18080 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
18090 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
180a0 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
180b0 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
180c0 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
180d0 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
180e0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
180f0 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
18100 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
18110 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
18120 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
18130 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
18140 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
18150 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
18160 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
18170 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
18180 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
18190 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
181a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
181b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
181c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
181d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
181e0 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20    Expr *pLeft;  
181f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74           /* Left
18200 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78   subnode */.  Ex
18210 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20  pr *pRight;     
18220 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75       /* Right su
18230 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  bnode */.  union
18240 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
18250 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f  *pList;     /* o
18260 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
18270 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55  SELECT, CASE, FU
18280 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20  NCTION, BETWEEN 
18290 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
182a0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45  Select;     /* E
182b0 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20  P_xIsSelect and 
182c0 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
182d0 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78   SELECT */.  } x
182e0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
182f0 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69  P_Reduced flag i
18300 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
18310 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
18320 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
18330 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
18340 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
18350 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
18360 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
18370 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
18380 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
18390 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
183a0 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
183b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
183c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
183d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
183e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
183f0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
18400 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
18410 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
18420 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74         /* Height
18430 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61   of the tree hea
18440 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  ded by this node
18450 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
18460 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
18470 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
18480 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  : cursor number 
18490 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67  of table holding
184a0 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   column.        
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184c0 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   ** TK_REGISTER:
184d0 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
184e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
184f0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
18500 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65  TRIGGER: 1 -> ne
18510 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20  w, 0 -> old.    
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b       ** EP_Unlik
18540 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20  ely:  134217728 
18550 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64  times likelihood
18560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18570 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
18580 53 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67 69  SELECT: 1st regi
18590 73 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20 76  ster of result v
185a0 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72  ector */.  ynVar
185b0 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
185c0 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
185d0 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d  column index.  -
185e0 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20  1 for rowid..   
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18600 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49        ** TK_VARI
18610 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e  ABLE: variable n
18620 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d  umber (always >=
18630 20 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20 20   1)..           
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18650 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d   TK_SELECT_COLUM
18660 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  N: column of the
18670 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a   result vector *
18680 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
18690 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
186a0 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
186b0 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
186c0 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
186d0 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
186e0 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
186f0 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
18700 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
18710 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70   join */.  u8 op
18720 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
18730 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
18740 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
18750 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18770 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
18780 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
18790 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
187a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
187b0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
187c0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
187d0 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
187e0 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
187f0 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
18800 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
18810 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
18820 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
18830 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
18840 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
18850 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
18860 6f 6e 73 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ons.  Can be NUL
18870 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  L.              
18880 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 6f             ** fo
18890 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  r a column of an
188a0 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78 70   index on an exp
188b0 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  ression */.};../
188c0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
188d0 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69  ng are the meani
188e0 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74  ngs of bits in t
188f0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  he Expr.flags fi
18900 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
18910 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30  EP_FromJoin  0x0
18920 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61  00001 /* Origina
18930 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20  tes in ON/USING 
18940 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20  clause of outer 
18950 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
18960 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30  EP_Agg       0x0
18970 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e  00002 /* Contain
18980 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
18990 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
189a0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
189b0 48 61 73 46 75 6e 63 20 20 20 30 78 30 30 30 30  HasFunc   0x0000
189c0 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f  04 /* Contains o
189d0 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74  ne or more funct
189e0 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64  ions of any kind
189f0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
18a00 20 20 20 20 20 20 2f 2a 20 30 78 30 30 30 30 30        /* 0x00000
18a10 38 20 2f 2f 20 61 76 61 69 6c 61 62 6c 65 20 66  8 // available f
18a20 6f 72 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  or use */.#defin
18a30 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30  e EP_Distinct  0
18a40 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65  x000010 /* Aggre
18a50 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
18a60 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  th DISTINCT keyw
18a70 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ord */.#define E
18a80 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  P_VarSelect 0x00
18a90 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20  0020 /* pSelect 
18aa0 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e  is correlated, n
18ab0 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23  ot constant */.#
18ac0 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f  define EP_DblQuo
18ad0 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20  ted 0x000040 /* 
18ae0 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67  token.z was orig
18af0 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20  inally in "..." 
18b00 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
18b10 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30  fixFunc 0x000080
18b20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20   /* True for an 
18b30 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20  infix function: 
18b40 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20  LIKE, GLOB, etc 
18b50 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
18b60 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30  llate   0x000100
18b70 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
18b80 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f  s a TK_COLLATE o
18b90 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
18ba0 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20  ne EP_Generic   
18bb0 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f  0x000200 /* Igno
18bc0 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66  re COLLATE or af
18bd0 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74  finity on this t
18be0 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ree */.#define E
18bf0 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30  P_IntValue  0x00
18c00 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20  0400 /* Integer 
18c10 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
18c20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23  in u.iValue */.#
18c30 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c  define EP_xIsSel
18c40 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20  ect 0x000800 /* 
18c50 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
18c60 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e  id (otherwise x.
18c70 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65  pList is) */.#de
18c80 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20  fine EP_Skip    
18c90 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f    0x001000 /* CO
18ca0 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e  LLATE, AS, or UN
18cb0 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e  LIKELY */.#defin
18cc0 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30  e EP_Reduced   0
18cd0 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20  x002000 /* Expr 
18ce0 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55  struct EXPR_REDU
18cf0 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  CEDSIZE bytes on
18d00 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
18d10 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34  _TokenOnly 0x004
18d20 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
18d30 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ct EXPR_TOKENONL
18d40 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
18d50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
18d60 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30  tatic    0x00800
18d70 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d  0 /* Held in mem
18d80 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64  ory not obtained
18d90 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a   from malloc() *
18da0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d  /.#define EP_Mem
18db0 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20  Token  0x010000 
18dc0 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74  /* Need to sqlit
18dd0 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e  e3DbFree() Expr.
18de0 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  zToken */.#defin
18df0 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30  e EP_NoReduce  0
18e00 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f  x020000 /* Canno
18e10 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
18e20 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64   this Expr */.#d
18e30 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c  efine EP_Unlikel
18e40 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75  y  0x040000 /* u
18e50 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b  nlikely() or lik
18e60 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69  elihood() functi
18e70 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
18e80 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30  _ConstFunc 0x080
18e90 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f  000 /* A SQLITE_
18ea0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72  FUNC_CONSTANT or
18eb0 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69   _SLOCHNG functi
18ec0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
18ed0 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30  _CanBeNull 0x100
18ee0 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75  000 /* Can be nu
18ef0 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e  ll despite NOT N
18f00 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
18f10 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62  /.#define EP_Sub
18f20 71 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20  query  0x200000 
18f30 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
18f40 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65   a TK_SELECT ope
18f50 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
18f60 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78   EP_Alias     0x
18f70 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20  400000 /* Is an 
18f80 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75  alias for a resu
18f90 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f  lt set column */
18fa0 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66  .#define EP_Leaf
18fb0 20 20 20 20 20 20 30 78 38 30 30 30 30 30 20 2f        0x800000 /
18fc0 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70  * Expr.pLeft, .p
18fd0 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63  Right, .u.pSelec
18fe0 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  t all NULL */../
18ff0 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f 70  *.** The EP_Prop
19000 61 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61 20  agate mask is a 
19010 73 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69 65  set of propertie
19020 73 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69 63  s that automatic
19030 61 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a 2a  ally propagate.*
19040 2a 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20 70  * upwards into p
19050 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a  arent nodes..*/.
19060 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61  #define EP_Propa
19070 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65  gate (EP_Collate
19080 7c 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50 5f  |EP_Subquery|EP_
19090 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  HasFunc)../*.** 
190a0 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
190b0 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
190c0 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
190d0 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45  bits in the.** E
190e0 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
190f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72  .*/.#define Expr
19100 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29  HasProperty(E,P)
19110 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67       (((E)->flag
19120 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
19130 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f  ne ExprHasAllPro
19140 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
19150 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  )->flags&(P))==(
19160 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  P)).#define Expr
19170 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29  SetProperty(E,P)
19180 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c       (E)->flags|
19190 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70  =(P).#define Exp
191a0 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45  rClearProperty(E
191b0 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  ,P)   (E)->flags
191c0 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45  &=~(P)../* The E
191d0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
191e0 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65  y() macro is use
191f0 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69  d for Verificati
19200 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a  on, Validation,.
19210 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  ** and Accredita
19220 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77  tion only.  It w
19230 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65  orks like ExprSe
19240 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69  tProperty() duri
19250 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73  ng VVA.** proces
19260 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d  ses but is a no-
19270 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e  op for delivery.
19280 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
19290 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65  E_DEBUG.# define
192a0 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
192b0 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66  rty(E,P)  (E)->f
192c0 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a  lags|=(P).#else.
192d0 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
192e0 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
192f0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
19300 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
19310 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ne the number of
19320 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20   bytes required 
19330 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72  by a normal Expr
19340 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45  .** struct, an E
19350 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
19360 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
19370 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e  lag set in Expr.
19380 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20  flags.** and an 
19390 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
193a0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
193b0 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23  y flag set..*/.#
193c0 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c  define EXPR_FULL
193d0 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73  SIZE           s
193e0 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20  izeof(Expr)     
193f0 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69        /* Full si
19400 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  ze */.#define EX
19410 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20  PR_REDUCEDSIZE  
19420 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
19430 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20  xpr,iTable)  /* 
19440 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20  Common features 
19450 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
19460 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20  TOKENONLYSIZE   
19470 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
19480 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77  ,pLeft)   /* Few
19490 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a  er features */..
194a0 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73  /*.** Flags pass
194b0 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ed to the sqlite
194c0 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74  3ExprDup() funct
194d0 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61  ion. See the hea
194e0 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61  der comment.** a
194f0 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
19500 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
19510 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
19520 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
19530 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
19540 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
19550 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
19560 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
19570 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
19580 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
19590 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
195a0 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
195b0 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
195c0 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
195d0 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
195e0 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
195f0 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
19600 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
19610 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
19620 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
19630 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
19640 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
19650 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
19660 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
19670 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
19680 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
19690 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
196a0 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
196b0 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
196c0 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
196d0 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
196e0 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
196f0 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
19700 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
19710 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
19720 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
19730 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
19740 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
19750 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
19760 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
19770 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
19780 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
19790 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
197a0 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
197b0 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
197c0 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
197d0 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
197e0 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
197f0 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
19800 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
19810 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
19820 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
19830 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
19840 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
19850 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
19860 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
19870 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
19880 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
19890 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
198a0 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
198b0 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
198c0 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
198d0 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
198e0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
198f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
19900 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
19910 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63   list */.  struc
19920 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
19930 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
19940 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
19950 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
19960 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
19970 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
19980 20 74 72 65 65 20 66 6f 72 20 74 68 69 73 20 65   tree for this e
19990 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
199a0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
199b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
199c0 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
199d0 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
199e0 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
199f0 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
19a00 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
19a10 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
19a20 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
19a30 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
19a40 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
19a50 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
19a60 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
19a70 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
19a80 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
19a90 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
19aa0 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
19ab0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
19ac0 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
19ad0 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
19ae0 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
19af0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
19b00 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
19b10 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
19b20 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
19b30 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
19b40 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
19b50 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
19b60 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
19b70 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
19b80 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
19b90 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
19ba0 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
19bb0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
19bc0 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
19bd0 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
19be0 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
19bf0 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
19c00 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
19c10 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
19c20 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
19c30 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
19c40 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  ;.  } a[1];     
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19c60 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63  One slot for eac
19c70 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
19c80 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
19c90 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
19ca0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
19cb0 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
19cc0 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
19cd0 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
19ce0 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
19cf0 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
19d00 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
19d10 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
19d20 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
19d30 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
19d40 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
19d50 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
19d60 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
19d70 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
19d80 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
19d90 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
19da0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
19db0 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
19dc0 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
19dd0 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
19de0 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
19df0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
19e00 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
19e10 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
19e20 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
19e30 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
19e40 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
19e50 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
19e60 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
19e70 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
19e80 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
19e90 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
19ea0 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
19eb0 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
19ec0 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
19ed0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
19ee0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
19ef0 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
19f00 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
19f10 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
19f20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
19f30 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
19f40 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
19f50 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
19f60 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
19f70 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
19f80 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
19f90 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
19fa0 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
19fb0 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
19fc0 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
19fd0 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
19fe0 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
19ff0 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
1a000 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
1a010 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
1a020 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
1a030 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
1a040 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
1a050 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
1a060 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
1a070 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
1a080 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
1a090 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66   on ix86..*/.#if
1a0a0 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41  def SQLITE_BITMA
1a0b0 53 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65  SK_TYPE.  typede
1a0c0 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
1a0d0 5f 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23  _TYPE Bitmask;.#
1a0e0 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
1a0f0 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64  64 Bitmask;.#end
1a100 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  if../*.** The nu
1a110 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20  mber of bits in 
1a120 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53  a Bitmask.  "BMS
1a130 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b  " means "BitMask
1a140 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Size"..*/.#defi
1a150 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73  ne BMS  ((int)(s
1a160 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38  izeof(Bitmask)*8
1a170 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20  ))../*.** A bit 
1a180 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a  in a Bitmask.*/.
1a190 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28  #define MASKBIT(
1a1a0 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29  n)   (((Bitmask)
1a1b0 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65  1)<<(n)).#define
1a1c0 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28   MASKBIT32(n) ((
1a1d0 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29  (unsigned int)1)
1a1e0 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41  <<(n)).#define A
1a1f0 4c 4c 42 49 54 53 20 20 20 20 20 20 28 28 42 69  LLBITS      ((Bi
1a200 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  tmask)-1)../*.**
1a210 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
1a220 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
1a230 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
1a240 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
1a250 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
1a260 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
1a270 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
1a280 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
1a290 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
1a2a0 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
1a2b0 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
1a2c0 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
1a2d0 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
1a2e0 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
1a2f0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1a300 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
1a310 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
1a320 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
1a330 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
1a340 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
1a350 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
1a360 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
1a370 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
1a380 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1a390 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
1a3a0 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
1a3b0 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
1a3c0 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
1a3d0 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
1a3e0 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
1a3f0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
1a400 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
1a410 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
1a420 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
1a430 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
1a440 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
1a450 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
1a460 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
1a470 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
1a480 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
1a490 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
1a4a0 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
1a4b0 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
1a4c0 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
1a4d0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
1a4e0 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
1a4f0 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
1a500 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
1a510 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
1a520 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
1a530 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
1a540 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
1a550 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
1a560 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
1a570 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
1a580 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
1a590 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
1a5a0 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
1a5b0 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
1a5c0 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
1a5d0 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
1a5e0 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
1a5f0 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
1a600 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
1a610 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
1a620 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
1a630 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
1a640 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1a650 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
1a660 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a670 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
1a680 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
1a690 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
1a6a0 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
1a6b0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1a6c0 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
1a6d0 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
1a6e0 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
1a6f0 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
1a700 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
1a710 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
1a720 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
1a730 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1a740 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
1a750 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
1a760 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
1a770 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
1a780 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
1a790 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
1a7a0 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
1a7b0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1a7c0 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
1a7d0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1a7e0 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
1a7f0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
1a800 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
1a810 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
1a820 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
1a830 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
1a840 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
1a850 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
1a860 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
1a870 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
1a880 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
1a890 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
1a8a0 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
1a8b0 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
1a8c0 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
1a8d0 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
1a8e0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
1a8f0 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
1a900 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
1a910 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20  /.    struct {. 
1a920 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65       u8 jointype
1a930 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
1a940 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
1a950 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68  his table and th
1a960 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
1a970 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
1a980 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
1a990 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1a9a0 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
1a9b0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1a9c0 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65   unsigned isInde
1a9d0 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54  xedBy :1;   /* T
1a9e0 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1a9f0 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  an INDEXED BY cl
1aa00 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1aa10 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63  signed isTabFunc
1aa20 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65   :1;     /* True
1aa30 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   if table-valued
1aa40 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78  -function syntax
1aa50 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1aa60 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
1aa70 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
1aa80 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
1aa90 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  related */.     
1aaa0 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
1aab0 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
1aac0 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
1aad0 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1aae0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
1aaf0 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
1ab00 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
1ab10 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
1ab20 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20  n WITH */.    } 
1ab30 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  fg;.#ifndef SQLI
1ab40 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
1ab50 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64      u8 iSelectId
1ab60 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c  ;     /* If pSel
1ab70 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f  ect!=0, the id o
1ab80 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74  f the sub-select
1ab90 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69   in EQP */.#endi
1aba0 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f  f.    int iCurso
1abb0 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56  r;      /* The V
1abc0 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
1abd0 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
1abe0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
1abf0 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20     Expr *pOn;   
1ac00 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63       /* The ON c
1ac10 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
1ac20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70  */.    IdList *p
1ac30 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20  Using;   /* The 
1ac40 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
1ac50 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69  a join */.    Bi
1ac60 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20  tmask colUsed;  
1ac70 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20  /* Bit N (1<<N) 
1ac80 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20  set if column N 
1ac90 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20  of pTab is used 
1aca0 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
1acb0 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65       char *zInde
1acc0 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65  xedBy;    /* Ide
1acd0 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e  ntifier from "IN
1ace0 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78  DEXED BY <zIndex
1acf0 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  >" clause */.   
1ad00 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75     ExprList *pFu
1ad10 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d  ncArg;  /* Argum
1ad20 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61  ents to table-va
1ad30 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f  lued-function */
1ad40 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49  .    } u1;.    I
1ad50 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20  ndex *pIBIndex; 
1ad60 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74   /* Index struct
1ad70 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ure correspondin
1ad80 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64  g to u1.zIndexed
1ad90 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  By */.  } a[1]; 
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1adb0 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
1adc0 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
1add0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
1ade0 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
1adf0 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
1ae00 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
1ae10 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
1ae20 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
1ae30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
1ae40 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
1ae50 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
1ae60 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
1ae70 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
1ae80 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
1ae90 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
1aea0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
1aeb0 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
1aec0 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
1aed0 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
1aee0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1aef0 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
1af00 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
1af10 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
1af20 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
1af30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
1af40 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
1af50 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
1af60 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
1af70 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
1af80 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
1af90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
1afa0 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
1afb0 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
1afc0 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
1afd0 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
1afe0 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
1aff0 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
1b000 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
1b010 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
1b020 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
1b030 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
1b040 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
1b050 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1b060 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
1b070 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1b080 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53  .**     WHERE_US
1b090 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46  E_LIMIT  == SF_F
1b0a0 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65  ixedLimit.*/.#de
1b0b0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1b0c0 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30  BY_NORMAL   0x00
1b0d0 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23  00 /* No-op */.#
1b0e0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1b0f0 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78  ERBY_MIN      0x
1b100 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59  0001 /* ORDER BY
1b110 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
1b120 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  min() func */.#d
1b130 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1b140 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30  RBY_MAX      0x0
1b150 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  002 /* ORDER BY 
1b160 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
1b170 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  ax() func */.#de
1b180 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
1b190 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30  SS_DESIRED  0x00
1b1a0 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f  04 /* Want to do
1b1b0 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45   one-pass UPDATE
1b1c0 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  /DELETE */.#defi
1b1d0 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
1b1e0 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38  _MULTIROW 0x0008
1b1f0 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f   /* ONEPASS is o
1b200 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  k with multiple 
1b210 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1b220 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
1b230 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a  _OK    0x0010 /*
1b240 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
1b250 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
1b260 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
1b270 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45  ERE_OR_SUBCLAUSE
1b280 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50       0x0020 /* P
1b290 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d  rocessing a sub-
1b2a0 57 48 45 52 45 20 61 73 20 70 61 72 74 20 6f 66  WHERE as part of
1b2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52         ** the OR
1b2e0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a   optimization  *
1b2f0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b300 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20  GROUPBY         
1b310 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65   0x0040 /* pOrde
1b320 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rBy is really a 
1b330 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
1b340 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1b350 43 54 42 59 20 20 20 20 20 20 20 30 78 30 30 38  CTBY       0x008
1b360 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73  0 /* pOrderby is
1b370 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e   really a DISTIN
1b380 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  CT clause */.#de
1b390 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f  fine WHERE_WANT_
1b3a0 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 31  DISTINCT    0x01
1b3b0 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74  00 /* All output
1b3c0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73   needs to be dis
1b3d0 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65  tinct */.#define
1b3e0 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f   WHERE_SORTBYGRO
1b3f0 55 50 20 20 20 20 20 20 30 78 30 32 30 30 20 2f  UP      0x0200 /
1b400 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65  * Support sqlite
1b410 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29  3WhereIsSorted()
1b420 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b430 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20  E_SEEK_TABLE    
1b440 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20     0x0400 /* Do 
1b450 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20  not defer seeks 
1b460 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f  on main table */
1b470 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1b480 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20  RDERBY_LIMIT    
1b490 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42  0x0800 /* ORDERB
1b4a0 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69  Y+LIMIT on the i
1b4b0 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65  nner loop */.#de
1b4c0 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f  fine WHERE_SEEK_
1b4d0 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30  UNIQ_TABLE  0x10
1b4e0 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66  00 /* Do not def
1b4f0 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71  er seeks if uniq
1b500 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ue */.          
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b520 20 20 20 20 20 30 78 32 30 30 30 20 20 20 20 6e       0x2000    n
1b530 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1b540 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
1b550 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20  RE_USE_LIMIT    
1b560 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73      0x4000 /* Us
1b570 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63  e the LIMIT in c
1b580 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f  ost estimates */
1b590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b5a0 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1b5b0 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x8000    not cu
1b5c0 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1b5d0 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  ./* Allowed retu
1b5e0 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
1b5f0 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
1b600 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69  tinct().*/.#defi
1b610 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1b620 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f  T_NOOP      0  /
1b630 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
1b640 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  rd not used */.#
1b650 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1b660 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20  TINCT_UNIQUE    
1b670 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61  1  /* No duplica
1b680 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  tes */.#define W
1b690 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52  HERE_DISTINCT_OR
1b6a0 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c  DERED   2  /* Al
1b6b0 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65  l duplicates are
1b6c0 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65   adjacent */.#de
1b6d0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1b6e0 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20  NCT_UNORDERED 3 
1b6f0 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61   /* Duplicates a
1b700 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a  re scattered */.
1b710 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e  ./*.** A NameCon
1b720 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63  text defines a c
1b730 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20  ontext in which 
1b740 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65  to resolve table
1b750 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e   and column.** n
1b760 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65  ames.  The conte
1b770 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  xt consists of a
1b780 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   list of tables 
1b790 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66  (the pSrcList) f
1b7a0 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69  ield and.** a li
1b7b0 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
1b7c0 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e  ession (pEList).
1b7d0 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72    The named expr
1b7e0 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a  ession list may.
1b7f0 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65  ** be NULL.  The
1b800 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64   pSrc correspond
1b810 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c  s to the FROM cl
1b820 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
1b830 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61   or.** to the ta
1b840 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74  ble being operat
1b850 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c  ed on by INSERT,
1b860 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
1b870 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69  TE.  The.** pELi
1b880 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
1b890 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  o the result set
1b8a0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64   of a SELECT and
1b8b0 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20   is NULL for.** 
1b8c0 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
1b8d0 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74  ..**.** NameCont
1b8e0 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74  exts can be nest
1b8f0 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76  ed.  When resolv
1b900 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69  ing names, the i
1b910 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e  nner-most.** con
1b920 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
1b930 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
1b940 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
1b950 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
1b960 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
1b970 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
1b980 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
1b990 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
1b9a0 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
1b9b0 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
1b9c0 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
1b9d0 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
1b9e0 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
1b9f0 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
1ba00 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
1ba10 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
1ba20 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
1ba30 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
1ba40 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
1ba50 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
1ba60 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  ted..**.** Each 
1ba70 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20  subquery gets a 
1ba80 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e  new NameContext.
1ba90 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c    The pNext fiel
1baa0 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  d points to the.
1bab0 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69  ** NameContext i
1bac0 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65  n the parent que
1bad0 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72  ry.  Thus the pr
1bae0 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e  ocess of scannin
1baf0 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  g the.** NameCon
1bb00 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73  text list corres
1bb10 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69  ponds to searchi
1bb20 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65  ng through succe
1bb30 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a  ssively outer.**
1bb40 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b   subqueries look
1bb50 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e  ing for a match.
1bb60 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43  .*/.struct NameC
1bb70 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65  ontext {.  Parse
1bb80 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1bb90 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f  /* The parser */
1bba0 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
1bbb0 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  List;   /* One o
1bbc0 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73  r more tables us
1bbd0 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61  ed to resolve na
1bbe0 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  mes */.  ExprLis
1bbf0 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a  t *pEList;    /*
1bc00 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f   Optional list o
1bc10 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c  f result-set col
1bc20 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66  umns */.  AggInf
1bc30 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
1bc40 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1bc50 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
1bc60 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
1bc70 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
1bc80 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
1bc90 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
1bca0 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
1bcb0 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
1bcc0 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
1bcd0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
1bce0 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
1bcf0 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
1bd00 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1bd10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bd20 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
1bd30 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
1bd40 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
1bd50 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20    u16 ncFlags;  
1bd60 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
1bd70 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
1bd80 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
1bd90 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
1bda0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
1bdb0 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
1bdc0 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
1bdd0 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1bde0 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65  traints (all che
1bdf0 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28  cked via assert(
1be00 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73  )):.**    NC_Has
1be10 41 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73  Agg    == SF_Has
1be20 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e  Agg.**    NC_Min
1be30 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e  MaxAgg == SF_Min
1be40 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54 45  MaxAgg == SQLITE
1be50 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a  _FUNC_MINMAX.**.
1be60 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
1be70 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20  lowAgg  0x0001  
1be80 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
1be90 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
1bea0 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
1beb0 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
1bec0 30 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20  0x0002  /* True 
1bed0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
1bee0 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
1bef0 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
1bf00 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30  _IsCheck   0x000
1bf10 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  4  /* True if re
1bf20 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
1bf30 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
1bf40 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  int */.#define N
1bf50 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30  C_InAggFunc 0x00
1bf60 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61  08  /* True if a
1bf70 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e  nalyzing argumen
1bf80 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e  ts to an agg fun
1bf90 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  c */.#define NC_
1bfa0 48 61 73 41 67 67 20 20 20 20 30 78 30 30 31 30  HasAgg    0x0010
1bfb0 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
1bfc0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1bfd0 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
1bfe0 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20  fine NC_IdxExpr 
1bff0 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75    0x0020  /* Tru
1c000 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63  e if resolving c
1c010 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45  olumns of CREATE
1c020 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
1c030 65 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30  e NC_VarSelect 0
1c040 78 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72  x0040  /* A corr
1c050 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
1c060 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
1c070 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
1c080 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
1c090 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
1c0a0 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
1c0b0 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  ote above */.#de
1c0c0 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c 65 78 20  fine NC_Complex 
1c0d0 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 72 75    0x2000  /* Tru
1c0e0 65 20 69 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  e if a function 
1c0f0 6f 72 20 73 75 62 71 75 65 72 79 20 73 65 65 6e  or subquery seen
1c100 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1c110 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1c120 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1c130 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69  e contains all i
1c140 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65  nformation.** ne
1c150 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
1c160 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67   code for a sing
1c170 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
1c180 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69  ent..**.** nLimi
1c190 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69  t is set to -1 i
1c1a0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49  f there is no LI
1c1b0 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66  MIT clause.  nOf
1c1c0 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30  fset is set to 0
1c1d0 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73  ..** If there is
1c1e0 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
1c1f0 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73   the parser sets
1c200 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76   nLimit to the v
1c210 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  alue of the.** l
1c220 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
1c230 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
1c240 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20   the offset (or 
1c250 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  0 if there is no
1c260 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42  t.** offset).  B
1c270 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69  ut later on, nLi
1c280 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
1c290 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72  become the memor
1c2a0 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69  y locations.** i
1c2b0 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20  n the VDBE that 
1c2c0 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74  record the limit
1c2d0 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e   and offset coun
1c2e0 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72  ters..**.** addr
1c2f0 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69  OpenEphm[] entri
1c300 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61  es contain the a
1c310 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65  ddress of OP_Ope
1c320 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
1c330 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64  es..** These add
1c340 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73  resses must be s
1c350 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65  tored so that we
1c360 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64   can go back and
1c370 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20   fill in.** the 
1c380 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50  P4_KEYINFO and P
1c390 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74  2 parameters lat
1c3a0 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65  er.  Neither the
1c3b0 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20   KeyInfo nor.** 
1c3c0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1c3d0 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20  lumns in P2 can 
1c3e0 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74  be computed at t
1c3f0 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20  he same time.** 
1c400 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70  as the OP_OpenEp
1c410 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  hm instruction i
1c420 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20  s coded because 
1c430 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e  not.** enough in
1c440 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1c450 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  the compound que
1c460 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74  ry is known at t
1c470 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68  hat point..** Th
1c480 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
1c490 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e  drOpenTran[0] an
1c4a0 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63  d [1] contains c
1c4b0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1c4c0 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65  es.** for the re
1c4d0 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b  sult set.  The K
1c4e0 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
1c4f0 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61  penEphm[2] conta
1c500 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a  ins collating.**
1c510 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74   sequences for t
1c520 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1c530 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  se..*/.struct Se
1c540 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  lect {.  ExprLis
1c550 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20  t *pEList;      
1c560 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66  /* The fields of
1c570 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20   the result */. 
1c580 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
1c590 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1c5a0 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41  f: TK_UNION TK_A
1c5b0 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20  LL TK_INTERSECT 
1c5c0 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c  TK_EXCEPT */.  L
1c5d0 6f 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77  ogEst nSelectRow
1c5e0 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
1c5f0 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  ed number of res
1c600 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33  ult rows */.  u3
1c610 32 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20  2 selFlags;     
1c620 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
1c630 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  SF_* values */. 
1c640 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66   int iLimit, iOf
1c650 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72  fset;   /* Memor
1c660 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64  y registers hold
1c670 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53  ing LIMIT & OFFS
1c680 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23  ET counters */.#
1c690 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  if SELECTTRACE_E
1c6a0 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53  NABLED.  char zS
1c6b0 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20  elName[12];     
1c6c0 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65  /* Symbolic name
1c6d0 20 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54 20   of this SELECT 
1c6e0 75 73 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e  use for debuggin
1c6f0 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  g */.#endif.  in
1c700 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  t addrOpenEphm[2
1c710 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45  ];   /* OP_OpenE
1c720 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c  phem opcodes rel
1c730 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ated to this sel
1c740 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ect */.  SrcList
1c750 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20   *pSrc;         
1c760 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75  /* The FROM clau
1c770 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  se */.  Expr *pW
1c780 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f  here;          /
1c790 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1c7a0 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
1c7b0 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f   *pGroupBy;    /
1c7c0 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63  * The GROUP BY c
1c7d0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
1c7e0 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20  *pHaving;       
1c7f0 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20    /* The HAVING 
1c800 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1c810 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
1c820 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20     /* The ORDER 
1c830 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53  BY clause */.  S
1c840 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20  elect *pPrior;  
1c850 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73        /* Prior s
1c860 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
1c870 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
1c880 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ment */.  Select
1c890 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
1c8a0 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20   /* Next select 
1c8b0 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61  to the left in a
1c8c0 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45   compound */.  E
1c8d0 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20  xpr *pLimit;    
1c8e0 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65        /* LIMIT e
1c8f0 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
1c900 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
1c910 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1c920 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
1c930 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63  ITH clause attac
1c940 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  hed to this sele
1c950 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a  ct. Or NULL. */.
1c960 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1c970 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
1c980 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
1c990 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
1c9a0 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
1c9b0 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a  lect Flag"..**.*
1c9c0 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1c9d0 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1c9e0 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a   via assert()).*
1c9f0 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67 20  *     SF_HasAgg 
1ca00 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67      == NC_HasAgg
1ca10 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61  .**     SF_MinMa
1ca20 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d  xAgg  == NC_MinM
1ca30 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c  axAgg     == SQL
1ca40 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1ca50 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c  **     SF_FixedL
1ca60 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53  imit == WHERE_US
1ca70 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69  E_LIMIT.*/.#defi
1ca80 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
1ca90 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a       0x00001  /*
1caa0 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
1cab0 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
1cac0 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20  efine SF_All    
1cad0 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32 20          0x00002 
1cae0 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65   /* Includes the
1caf0 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a   ALL keyword */.
1cb00 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c  #define SF_Resol
1cb10 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30 30  ved       0x0000
1cb20 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72  4  /* Identifier
1cb30 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
1cb40 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lved */.#define 
1cb50 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20  SF_Aggregate    
1cb60 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f    0x00008  /* Co
1cb70 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74  ntains agg funct
1cb80 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20  ions or a GROUP 
1cb90 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  BY */.#define SF
1cba0 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20 20  _HasAgg         
1cbb0 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74  0x00010  /* Cont
1cbc0 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
1cbd0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
1cbe0 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
1cbf0 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f  eral  0x00020  /
1cc00 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
1cc10 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
1cc20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
1cc30 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78 30  panded       0x0
1cc40 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0040  /* sqlite3
1cc50 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
1cc60 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
1cc70 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
1cc80 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30  ypeInfo    0x000
1cc90 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  80  /* FROM subq
1cca0 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
1ccb0 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
1ccc0 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
1ccd0 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30 20  d       0x00100 
1cce0 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
1ccf0 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
1cd00 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
1cd10 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32 30  s         0x0020
1cd20 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
1cd30 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
1cd40 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1cd50 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20  SF_MultiValue   
1cd60 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69    0x00400  /* Si
1cd70 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d  ngle VALUES term
1cd80 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1cd90 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ows */.#define S
1cda0 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
1cdb0 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72   0x00800  /* Par
1cdc0 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
1cdd0 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
1cde0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1cdf0 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30 78  inMaxAgg      0x
1ce00 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  01000  /* Aggreg
1ce10 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
1ce20 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
1ce30 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
1ce40 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32 30  rsive      0x020
1ce50 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
1ce60 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
1ce70 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
1ce80 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64  #define SF_Fixed
1ce90 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30 30  Limit     0x0400
1cea0 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77  0  /* nSelectRow
1ceb0 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61   set by a consta
1cec0 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66  nt LIMIT */.#def
1ced0 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
1cee0 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20 2f  ert   0x08000  /
1cef0 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
1cf00 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1cf10 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1cf20 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64  ine SF_Converted
1cf30 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20 2f        0x10000  /
1cf40 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70  * By convertComp
1cf50 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1cf60 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1cf70 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64  e SF_IncludeHidd
1cf80 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20  en  0x20000  /* 
1cf90 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63  Include hidden c
1cfa0 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74  olumns in output
1cfb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1cfc0 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30 78  omplexResult  0x
1cfd0 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c 74  40000  /* Result
1cfe0 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 73 75   set contains su
1cff0 62 71 75 65 72 79 20 6f 72 20 66 75 6e 63 74 69  bquery or functi
1d000 6f 6e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  on */.../*.** Th
1d010 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53  e results of a S
1d020 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73  ELECT can be dis
1d030 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65  tributed in seve
1d040 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66  ral ways, as def
1d050 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f  ined.** by one o
1d060 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1d070 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52  macros.  The "SR
1d080 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
1d090 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a  "SELECT Result.*
1d0a0 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20  * Type"..**.**  
1d0b0 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20     SRT_Union    
1d0c0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1d0d0 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74   as a key in a t
1d0e0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a  emporary index.*
1d0f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d100 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64        identified
1d110 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61   by pDest->iSDPa
1d120 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
1d130 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65  T_Except      Re
1d140 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f  move results fro
1d150 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  m the temporary 
1d160 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44  index pDest->iSD
1d170 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
1d180 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
1d190 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d  Store a 1 in mem
1d1a0 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e  ory cell pDest->
1d1b0 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72  iSDParm if the r
1d1c0 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20  esult.**        
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1d1e0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a   is not empty..*
1d1f0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1d200 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74  card     Throw t
1d210 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e  he results away.
1d220 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62    This is used b
1d230 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20  y SELECT.**     
1d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d250 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
1d260 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65  n triggers whose
1d270 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73   only purpose is
1d280 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d290 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65          the side
1d2a0 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63  -effects of func
1d2b0 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  tions..**.** All
1d2c0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72   of the above ar
1d2d0 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65  e free to ignore
1d2e0 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20   their ORDER BY 
1d2f0 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68  clause. Those th
1d300 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73  at.** follow mus
1d310 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45  t honor the ORDE
1d320 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
1d330 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75  **     SRT_Outpu
1d340 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20  t      Generate 
1d350 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20  a row of output 
1d360 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65  (using the OP_Re
1d370 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20  sultRow.**      
1d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1d390 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20  pcode) for each 
1d3a0 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c  row in the resul
1d3b0 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  t set..**.**    
1d3c0 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
1d3d0 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74   Only valid if t
1d3e0 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73  he result is a s
1d3f0 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  ingle column..**
1d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d410 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66       Store the f
1d420 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  irst column of t
1d430 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20  he first result 
1d440 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  row.**          
1d450 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65             in re
1d460 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1d470 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64  DParm then aband
1d480 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20  on the rest.**  
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e     of the query.
1d4b0 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69    This destinati
1d4c0 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49  on implies "LIMI
1d4d0 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  T 1"..**.**     
1d4e0 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
1d4f0 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20  The result must 
1d500 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  be a single colu
1d510 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a  mn.  Store each.
1d520 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d530 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65         row of re
1d540 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20  sult as the key 
1d550 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  in table pDest->
1d560 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
1d570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d580 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69  Apply the affini
1d590 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73  ty pDest->affSds
1d5a0 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67  t before storing
1d5b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d5c0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e          results.
1d5d0 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d    Used to implem
1d5e0 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20  ent "IN (SELECT 
1d5f0 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  ...)"..**.**    
1d600 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1d610 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f   Create an tempo
1d620 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1d630 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74  ->iSDParm and st
1d640 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1d650 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72             the r
1d660 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65  esult there. The
1d670 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
1d680 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20  open after.**   
1d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6a0 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68    returning.  Th
1d6b0 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54  is is like SRT_T
1d6c0 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74  able except that
1d6d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d6e0 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73          this des
1d6f0 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50  tination uses OP
1d700 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74  _OpenEphemeral t
1d710 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20  o create.**     
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d730 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e  the table first.
1d740 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43  .**.**     SRT_C
1d750 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72  oroutine   Gener
1d760 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65  ate a co-routine
1d770 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20   that returns a 
1d780 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20  new row of.**   
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7a0 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74    results each t
1d7b0 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65  ime it is invoke
1d7c0 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f  d.  The entry po
1d7d0 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  int.**          
1d7e0 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
1d7f0 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20  e co-routine is 
1d800 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1d810 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
1d820 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  m.**            
1d830 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65           and the
1d840 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73   result row is s
1d850 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e  tored in pDest->
1d860 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a  nDest registers.
1d870 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d880 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20         starting 
1d890 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73  with pDest->iSds
1d8a0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1d8b0 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f  _Table       Sto
1d8c0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65  re results in te
1d8d0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1d8e0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1d8f0 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20       SRT_Fifo   
1d900 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b       This is lik
1d910 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65  e SRT_EphemTab e
1d920 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74  xcept that the t
1d930 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  able.**         
1d940 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61              is a
1d950 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64  ssumed to alread
1d960 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f  y be open.  SRT_
1d970 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20  Fifo has.**     
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  the additional p
1d9a0 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67  roperty of being
1d9b0 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a   able to ignore.
1d9c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d9d0 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52         the ORDER
1d9e0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
1d9f0 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69  *     SRT_DistFi
1da00 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75  fo    Store resu
1da10 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  lts in a tempora
1da20 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1da30 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
1da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da50 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d  But also use tem
1da60 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1da70 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73  st->iSDParm+1 as
1da80 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1da90 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64          a record
1daa0 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65   of all prior re
1dab0 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65  sults and ignore
1dac0 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a   any duplicate.*
1dad0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1dae0 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d        rows.  Nam
1daf0 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69  e means:  "Disti
1db00 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a  nct Fifo"..**.**
1db10 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20       SRT_Queue  
1db20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1db30 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1db40 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1db50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20  arm (really.**  
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db70 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41     an index).  A
1db80 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65  ppend a sequence
1db90 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20   number so that 
1dba0 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20  all entries.**  
1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbc0 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e     are distinct.
1dbd0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1dbe0 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65  istQueue   Store
1dbf0 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
1dc00 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
1dc10 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69  ->iSDParm only i
1dc20 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
1dc30 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d           the sam
1dc40 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76  e record has nev
1dc50 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62  er been stored b
1dc60 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20  efore.  The.**  
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc80 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73     index at pDes
1dc90 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c  t->iSDParm+1 hol
1dca0 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72  d all prior stor
1dcb0 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  es..*/.#define S
1dcc0 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20  RT_Union        
1dcd0 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
1dce0 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  lt as keys in an
1dcf0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1dd00 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20  e SRT_Except    
1dd10 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20     2  /* Remove 
1dd20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e  result from a UN
1dd30 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  ION index */.#de
1dd40 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20  fine SRT_Exists 
1dd50 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72        3  /* Stor
1dd60 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c  e 1 if the resul
1dd70 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a  t is not empty *
1dd80 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1dd90 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a  scard      4  /*
1dda0 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65   Do not save the
1ddb0 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72   results anywher
1ddc0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1ddd0 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20  _Fifo         5 
1dde0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1ddf0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
1de00 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
1de10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1de20 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20  DistFifo     6  
1de30 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f  /* Like SRT_Fifo
1de40 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73  , but unique res
1de50 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ults only */.#de
1de60 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20  fine SRT_Queue  
1de70 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72        7  /* Stor
1de80 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71  e result in an q
1de90 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ueue */.#define 
1dea0 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
1deb0 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   8  /* Like SRT_
1dec0 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75  Queue, but uniqu
1ded0 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
1dee0 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20  /../* The ORDER 
1def0 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e  BY clause is ign
1df00 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20  ored for all of 
1df10 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  the above */.#de
1df20 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72  fine IgnorableOr
1df30 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44  derby(X) ((X->eD
1df40 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75  est)<=SRT_DistQu
1df50 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52  eue)..#define SR
1df60 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39  T_Output       9
1df70 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68    /* Output each
1df80 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1df90 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65  /.#define SRT_Me
1dfa0 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a  m         10  /*
1dfb0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
1dfc0 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a   a memory cell *
1dfd0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65  /.#define SRT_Se
1dfe0 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a  t         11  /*
1dff0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
1e000 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1e010 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1e020 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32  T_EphemTab    12
1e030 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e    /* Create tran
1e040 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74  sient tab and st
1e050 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62  ore like SRT_Tab
1e060 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  le */.#define SR
1e070 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33  T_Coroutine   13
1e080 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20    /* Generate a 
1e090 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
1e0a0 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
1e0b0 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1e0c0 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  14  /* Store res
1e0d0 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1e0e0 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1e0f0 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  wid */../*.** An
1e100 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
1e110 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  s object describ
1e120 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20  es where to put 
1e130 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
1e140 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74  f.** a SELECT st
1e150 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
1e160 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a  ct SelectDest {.
1e170 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20    u8 eDest;     
1e180 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f         /* How to
1e190 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20   dispose of the 
1e1a0 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20  results.  On of 
1e1b0 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a  SRT_* above. */.
1e1c0 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20    int iSDParm;  
1e1d0 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61         /* A para
1e1e0 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68  meter used by th
1e1f0 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c  e eDest disposal
1e200 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74   method */.  int
1e210 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   iSdst;         
1e220 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1e230 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73  er where results
1e240 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a   are written */.
1e250 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20    int nSdst;    
1e260 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e270 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
1e280 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63 68 61  located */.  cha
1e290 72 20 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20  r *zAffSdst;    
1e2a0 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73    /* Affinity us
1e2b0 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53  ed when eDest==S
1e2c0 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70 72  RT_Set */.  Expr
1e2d0 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
1e2e0 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20   /* Key columns 
1e2f0 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e  for SRT_Queue an
1e300 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  d SRT_DistQueue 
1e310 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72  */.};../*.** Dur
1e320 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74  ing code generat
1e330 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  ion of statement
1e340 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74  s that do insert
1e350 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45  s into AUTOINCRE
1e360 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20  MENT.** tables, 
1e370 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
1e380 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74  formation is att
1e390 61 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62  ached to the Tab
1e3a0 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a  le.u.autoInc.p.*
1e3b0 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63  * pointer of eac
1e3c0 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  h autoincrement 
1e3d0 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20  table to record 
1e3e0 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d  some side inform
1e3f0 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68  ation that.** th
1e400 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1e410 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65   needs.  We have
1e420 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62   to keep per-tab
1e430 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  le autoincrement
1e440 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
1e450 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20  in case inserts 
1e460 61 72 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20  are done within 
1e470 74 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67  triggers.  Trigg
1e480 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f  ers do not.** no
1e490 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74  rmally coordinat
1e4a0 65 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69  e their activiti
1e4b0 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65  es, but we do ne
1e4c0 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65  ed to coordinate
1e4d0 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20   the.** loading 
1e4e0 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75  and saving of au
1e4f0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f  toincrement info
1e500 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
1e510 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b  ct AutoincInfo {
1e520 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
1e530 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74  pNext;   /* Next
1e540 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61   info block in a
1e550 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c   list of them al
1e560 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  l */.  Table *pT
1e570 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ab;          /* 
1e580 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20  Table this info 
1e590 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20  block refers to 
1e5a0 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
1e5b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1e5c0 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  dex in sqlite3.a
1e5d0 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65  Db[] of database
1e5e0 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f   holding pTab */
1e5f0 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20  .  int regCtr;  
1e600 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
1e610 72 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64  ry register hold
1e620 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f  ing the rowid co
1e630 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unter */.};../*.
1e640 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63  ** Size of the c
1e650 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23  olumn cache.*/.#
1e660 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f  ifndef SQLITE_N_
1e670 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e  COLCACHE.# defin
1e680 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e SQLITE_N_COLCA
1e690 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f  CHE 10.#endif../
1e6a0 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e  *.** At least on
1e6b0 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
1e6c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1e6d0 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64  cture is created
1e6e0 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69   for each.** tri
1e6f0 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65  gger that may be
1e700 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72   fired while par
1e710 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  sing an INSERT, 
1e720 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
1e730 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41  .** statement. A
1e740 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20  ll such objects 
1e750 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
1e760 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  e linked list he
1e770 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65  aded at.** Parse
1e780 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64  .pTriggerPrg and
1e790 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74   deleted once st
1e7a0 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74  atement compilat
1e7b0 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ion has been.** 
1e7c0 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a  completed..**.**
1e7d0 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67   A Vdbe sub-prog
1e7e0 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ram that impleme
1e7f0 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64  nts the body and
1e800 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
1e810 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67  trigger.** Trigg
1e820 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20  erPrg.pTrigger, 
1e830 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75  assuming a defau
1e840 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  lt ON CONFLICT c
1e850 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67  lause of.** Trig
1e860 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69  gerPrg.orconf, i
1e870 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
1e880 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67  TriggerPrg.pProg
1e890 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  ram variable..**
1e8a0 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67   The Parse.pTrig
1e8b0 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65  gerPrg list neve
1e8c0 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65  r contains two e
1e8d0 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20  ntries with the 
1e8e0 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66  same.** values f
1e8f0 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72  or both pTrigger
1e900 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a   and orconf..**.
1e910 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72  ** The TriggerPr
1e920 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61  g.aColmask[0] va
1e930 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
1e940 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a   a mask of old.*
1e950 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65   columns.** acce
1e960 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20  ssed (or set to 
1e970 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66  0 for triggers f
1e980 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  ired as a result
1e990 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74   of INSERT.** st
1e9a0 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
1e9b0 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
1e9c0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
1e9d0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1e9e0 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
1e9f0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
1ea00 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
1ea10 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
1ea20 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
1ea30 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
1ea40 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1ea50 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
1ea60 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
1ea70 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
1ea80 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
1ea90 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
1eaa0 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1eab0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
1eac0 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
1ead0 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
1eae0 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
1eaf0 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
1eb00 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1eb10 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
1eb20 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
1eb30 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
1eb40 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
1eb50 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
1eb60 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
1eb70 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
1eb80 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
1eb90 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
1eba0 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
1ebb0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1ebc0 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
1ebd0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
1ebe0 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  30.  typedef uns
1ebf0 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61  igned char yDbMa
1ec00 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41  sk[(SQLITE_MAX_A
1ec10 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23  TTACHED+9)/8];.#
1ec20 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1ec30 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1ec40 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29  [(I)/8]&(1<<((I)
1ec50 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  &7)))!=0).# defi
1ec60 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1ec70 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29        memset((M)
1ec80 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20  ,0,sizeof(M)).# 
1ec90 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
1eca0 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49  (M,I)     (M)[(I
1ecb0 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37  )/8]|=(1<<((I)&7
1ecc0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1ecd0 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73  skAllZero(M)   s
1ece0 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
1ecf0 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20  ero(M).# define 
1ed00 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
1ed10 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73     (sqlite3DbMas
1ed20 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a  kAllZero(M)==0).
1ed30 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
1ed40 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
1ed50 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44  Mask;.# define D
1ed60 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1ed70 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61    (((M)&(((yDbMa
1ed80 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29  sk)1)<<(I)))!=0)
1ed90 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1eda0 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29  Zero(M)      (M)
1edb0 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
1edc0 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1edd0 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31  M)|=(((yDbMask)1
1ede0 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65  )<<(I)).# define
1edf0 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1ee00 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66  )   (M)==0.# def
1ee10 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1ee20 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65  o(M)   (M)!=0.#e
1ee30 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53  ndif../*.** An S
1ee40 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78  QL parser contex
1ee50 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68  t.  A copy of th
1ee60 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1ee70 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a  passed through.*
1ee80 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  * the parser and
1ee90 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74   down into all t
1eea0 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e  he parser action
1eeb0 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
1eec0 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72  r to.** carry ar
1eed0 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ound information
1eee0 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20   that is global 
1eef0 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  to the entire pa
1ef00 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  rse..**.** The s
1ef10 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69  tructure is divi
1ef20 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72  ded into two par
1ef30 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61  ts.  When the pa
1ef40 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a  rser and code.**
1ef50 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74   generate call t
1ef60 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73  hemselves recurs
1ef70 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74  ively, the first
1ef80 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72   part of the str
1ef90 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e  ucture.** is con
1efa0 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65  stant but the se
1efb0 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73  cond part is res
1efc0 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  et at the beginn
1efd0 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a  ing and end of.*
1efe0 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1eff0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62  ..**.** The nTab
1f000 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c  leLock and aTabl
1f010 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20  eLock variables 
1f020 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66  are only used if
1f030 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
1f040 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20  e.** feature is 
1f050 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69  enabled (if sqli
1f060 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61  te3Tsd()->useSha
1f070 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29  redData is true)
1f080 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73  . They are.** us
1f090 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1f0a0 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63  set of table-loc
1f0b0 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ks required by t
1f0c0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
1f0d0 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20  ng.** compiled. 
1f0e0 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
1f0f0 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75  TableLock() is u
1f100 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69  sed to add entri
1f110 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73  es to the.** lis
1f120 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72  t..*/.struct Par
1f130 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se {.  sqlite3 *
1f140 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  db;         /* T
1f150 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1f160 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
1f170 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
1f180 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72       /* An error
1f190 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64   message */.  Vd
1f1a0 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
1f1b0 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20     /* An engine 
1f1c0 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61  for executing da
1f1d0 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20  tabase bytecode 
1f1e0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1f1f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
1f200 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78  urn code from ex
1f210 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ecution */.  u8 
1f220 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20  colNamesSet;    
1f230 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20    /* TRUE after 
1f240 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61  OP_ColumnName ha
1f250 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f  s been issued to
1f260 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63   pVdbe */.  u8 c
1f270 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
1f280 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
1f290 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
1f2a0 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
1f2b0 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
1f2c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f2d0 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
1f2e0 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
1f2f0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1f300 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b  /.  u8 nTempReg;
1f310 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1f320 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  er of temporary 
1f330 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65  registers in aTe
1f340 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  mpReg[] */.  u8 
1f350 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
1f360 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
1f370 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66  tement may modif
1f380 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  y/insert multipl
1f390 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
1f3a0 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
1f3b0 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
1f3c0 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
1f3d0 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
1f3e0 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f  on */.  u8 hasCo
1f3f0 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20  mpound;      /* 
1f400 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63  Need to invoke c
1f410 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1f420 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1f430 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74   */.  u8 okConst
1f440 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b  Factor;    /* OK
1f450 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63   to factor out c
1f460 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38  onstants */.  u8
1f470 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64   disableLookasid
1f480 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  e; /* Number of 
1f490 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20  times lookaside 
1f4a0 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65  has been disable
1f4b0 64 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61  d */.  u8 nColCa
1f4c0 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  che;        /* N
1f4d0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
1f4e0 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20   in aColCache[] 
1f4f0 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
1f500 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
1f510 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
1f520 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
1f530 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
1f540 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
1f550 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
1f560 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1f570 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
1f580 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1f590 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f5a0 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
1f5b0 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
1f5c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f5d0 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
1f5e0 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
1f5f0 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
1f600 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
1f610 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
1f620 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
1f630 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1f640 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  OpAlloc;        
1f650 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f  /* Number of slo
1f660 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ts allocated for
1f670 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1f680 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20   int szOpAlloc; 
1f690 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
1f6a0 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61  f memory space a
1f6b0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1f6c0 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1f6d0 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20   iSelfTab;      
1f6e0 20 20 2f 2a 20 54 61 62 6c 65 20 61 73 73 6f 63    /* Table assoc
1f6f0 69 61 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e  iated with an in
1f700 64 65 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20  dex on expr, or 
1f710 6e 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 20  negative.       
1f720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f730 2a 2a 20 6f 66 20 74 68 65 20 62 61 73 65 20 72  ** of the base r
1f740 65 67 69 73 74 65 72 20 64 75 72 69 6e 67 20 63  egister during c
1f750 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20  heck-constraint 
1f760 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43  eval */.  int iC
1f770 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
1f780 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
1f790 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
1f7a0 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
1f7b0 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
1f7c0 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
1f7d0 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
1f7e0 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
1f7f0 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
1f800 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  es */.  int nLab
1f810 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
1f820 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73  Number of labels
1f830 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a   used */.  int *
1f840 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  aLabel;         
1f850 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  /* Space to hold
1f860 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20   the labels */. 
1f870 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73   ExprList *pCons
1f880 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e  tExpr;/* Constan
1f890 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  t expressions */
1f8a0 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61  .  Token constra
1f8b0 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20  intName;/* Name 
1f8c0 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
1f8d0 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
1f8e0 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44  g parsed */.  yD
1f8f0 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
1f900 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
1f910 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
1f920 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
1f930 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
1f940 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
1f950 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
1f960 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
1f970 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ases */.  int re
1f980 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f  gRowid;        /
1f990 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1f9a0 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41  ng rowid of CREA
1f9b0 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a  TE TABLE entry *
1f9c0 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b  /.  int regRoot;
1f9d0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
1f9e0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f  ster holding roo
1f9f0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
1fa00 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f  r new objects */
1fa10 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20  .  int nMaxArg; 
1fa20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61          /* Max a
1fa30 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73  rgs passed to us
1fa40 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73  er function by s
1fa50 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69  ub-program */.#i
1fa60 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
1fa70 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c  ABLED.  int nSel
1fa80 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ect;         /* 
1fa90 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54  Number of SELECT
1faa0 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e   statements seen
1fab0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63   */.  int nSelec
1fac0 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f  tIndent;   /* Ho
1fad0 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20  w far to indent 
1fae0 53 45 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75  SELECTTRACE() ou
1faf0 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tput */.#endif.#
1fb00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1fb10 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
1fb20 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
1fb30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1fb40 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
1fb50 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
1fb60 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
1fb70 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
1fb80 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
1fb90 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
1fba0 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
1fbb0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69  AutoincInfo *pAi
1fbc0 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  nc;  /* Informat
1fbd0 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e  ion about AUTOIN
1fbe0 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73  CREMENT counters
1fbf0 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
1fc00 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
1fc10 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
1fc20 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
1fc30 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
1fc40 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
1fc50 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
1fc60 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
1fc70 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  oded for */.  in
1fc80 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20  t addrCrTab;    
1fc90 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
1fca0 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65 20   OP_CreateBtree 
1fcb0 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45  opcode on CREATE
1fcc0 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20   TABLE */.  u32 
1fcd0 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
1fce0 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
1fcf0 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
1fd00 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
1fd10 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
1fd20 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
1fd30 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
1fd40 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1fd50 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
1fd60 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1fd70 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
1fd80 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1fd90 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
1fda0 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
1fdb0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1fdc0 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
1fdd0 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
1fde0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1fdf0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1fe00 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
1fe10 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
1fe20 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
1fe30 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
1fe40 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
1fe50 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
1fe60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fea0 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62  *.  ** Fields ab
1feb0 6f 76 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74  ove must be init
1fec0 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e  ialized to zero.
1fed0 20 20 54 68 65 20 66 69 65 6c 64 73 20 74 68 61    The fields tha
1fee0 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64  t follow,.  ** d
1fef0 6f 77 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e  own to the begin
1ff00 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75  ning of the recu
1ff10 72 73 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64  rsive section, d
1ff20 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
1ff30 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65  .  ** initialize
1ff40 64 20 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62  d as they will b
1ff50 65 20 73 65 74 20 62 65 66 6f 72 65 20 62 65 69  e set before bei
1ff60 6e 67 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f  ng used.  The bo
1ff70 75 6e 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64  undary is.  ** d
1ff80 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66  etermined by off
1ff90 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c  setof(Parse,aCol
1ffa0 43 61 63 68 65 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a  Cache)..  ******
1ffb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ffc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ffd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ffe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fff0 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72 75 63 74 20  ****/..  struct 
20000 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20  yColCache {.    
20010 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
20020 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
20030 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
20040 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b      i16 iColumn;
20050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
20060 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  le column number
20070 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52   */.    u8 tempR
20080 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  eg;           /*
20090 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20   iReg is a temp 
200a0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65  register that ne
200b0 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
200c0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65  */.    int iLeve
200d0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
200e0 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f  Nesting level */
200f0 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20  .    int iReg;  
20100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
20110 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20  g with value of 
20120 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d  this column. 0 m
20130 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20  eans none. */.  
20140 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20    int lru;      
20150 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74          /* Least
20160 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65   recently used e
20170 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61  ntry has the sma
20180 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20  llest value */. 
20190 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c   } aColCache[SQL
201a0 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b  ITE_N_COLCACHE];
201b0 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63    /* One for eac
201c0 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65  h column cache e
201d0 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 61 54  ntry */.  int aT
201e0 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 20  empReg[8];      
201f0 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65    /* Holding are
20200 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  a for temporary 
20210 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 54  registers */.  T
20220 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b  oken sNameToken;
20230 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
20240 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64  with unqualified
20250 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e   schema object n
20260 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ame */..  /*****
20270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
202a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
202b0 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69  ***.  ** Above i
202c0 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
202d0 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
202e0 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
202f0 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
20300 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
20310 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  ion.  The bounda
20320 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65  ry between these
20330 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20   two regions is 
20340 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20  determined.  ** 
20350 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50  using offsetof(P
20360 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29  arse,sLastToken)
20370 20 73 6f 20 74 68 65 20 73 4c 61 73 74 54 6f 6b   so the sLastTok
20380 65 6e 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65  en field must be
20390 20 74 68 65 0a 20 20 2a 2a 20 66 69 72 73 74 20   the.  ** first 
203a0 66 69 65 6c 64 20 69 6e 20 74 68 65 20 72 65 63  field in the rec
203b0 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20  ursive region.. 
203c0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
203d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
203e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
203f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f  *********/..  To
20410 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
20420 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73        /* The las
20430 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a  t token parsed *
20440 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20  /.  ynVar nVar; 
20450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20460 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76   Number of '?' v
20470 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e  ariables seen in
20480 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20   the SQL so far 
20490 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f  */.  u8 iPkSortO
204a0 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
204b0 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f  * ASC or DESC fo
204c0 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  r INTEGER PRIMAR
204d0 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78  Y KEY */.  u8 ex
204e0 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20  plain;          
204f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
20500 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67  the EXPLAIN flag
20510 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65   is found on the
20520 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65   query */.#ifnde
20530 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
20540 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20  RTUALTABLE.  u8 
20550 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20  declareVtab;    
20560 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
20570 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33  f inside sqlite3
20580 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
20590 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f  */.  int nVtabLo
205a0 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ck;            /
205b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74  * Number of virt
205c0 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f  ual tables to lo
205d0 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  ck */.#endif.  i
205e0 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
205f0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
20600 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67  ession tree heig
20610 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75  ht of current su
20620 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e  b-select */.#ifn
20630 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
20640 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53  EXPLAIN.  int iS
20650 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
20660 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72      /* ID of cur
20670 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20  rent select for 
20680 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
20690 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c  /.  int iNextSel
206a0 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a  ectId;        /*
206b0 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   Next available 
206c0 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58  select ID for EX
206d0 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
206e0 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a  #endif.  VList *
206f0 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  pVList;         
20700 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65     /* Mapping be
20710 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e  tween variable n
20720 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73  ames and numbers
20730 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
20740 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
20750 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
20760 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
20770 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
20780 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
20790 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
207a0 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
207b0 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
207c0 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
207d0 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
207e0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
207f0 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
20800 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
20810 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
20820 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
20830 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
20840 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
20850 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
20860 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
20870 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
20880 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
20890 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
208a0 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
208b0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
208c0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
208d0 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b  LE.  Token sArg;
208e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
208f0 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  * Complete text 
20900 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75  of a module argu
20910 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ment */.  Table 
20920 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20  **apVtabLock;   
20930 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
20940 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  o virtual tables
20950 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67   needing locking
20960 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62   */.#endif.  Tab
20970 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20  le *pZombieTab; 
20980 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
20990 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20  f Table objects 
209a0 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20  to delete after 
209b0 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72  code gen */.  Tr
209c0 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67  iggerPrg *pTrigg
209d0 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65  erPrg;  /* Linke
209e0 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20  d list of coded 
209f0 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69  triggers */.  Wi
20a00 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
20a10 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
20a20 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  nt WITH clause, 
20a30 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74  or NULL */.  Wit
20a40 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20  h *pWithToFree; 
20a50 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74         /* Free t
20a60 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20  his WITH object 
20a70 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
20a80 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e parse */.};../
20a90 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20 70  *.** Sizes and p
20aa0 6f 69 6e 74 65 72 73 20 6f 66 20 76 61 72 69 6f  ointers of vario
20ab0 75 73 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  us parts of the 
20ac0 50 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f  Parse object..*/
20ad0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 48  .#define PARSE_H
20ae0 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50  DR_SZ offsetof(P
20af0 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 20  arse,aColCache) 
20b00 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72  /* Recursive par
20b10 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a  t w/o aColCache*
20b20 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
20b30 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65  RECURSE_SZ offse
20b40 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54  tof(Parse,sLastT
20b50 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75  oken)    /* Recu
20b60 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
20b70 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
20b80 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73  _SZ (sizeof(Pars
20b90 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45  e)-PARSE_RECURSE
20ba0 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75  _SZ) /* Non-recu
20bb0 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
20bc0 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
20bd0 28 58 29 20 28 28 28 63 68 61 72 2a 29 28 58 29  (X) (((char*)(X)
20be0 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  )+PARSE_RECURSE_
20bf0 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20  SZ)  /* Pointer 
20c00 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a  to tail */../*.*
20c10 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
20c20 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
20c30 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
20c40 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
20c50 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
20c60 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
20c70 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
20c80 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
20c90 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
20ca0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
20cb0 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
20cc0 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
20cd0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
20ce0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
20cf0 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
20d00 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
20d10 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
20d20 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
20d30 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
20d40 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
20d50 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
20d60 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
20d70 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
20d80 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
20d90 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
20da0 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
20db0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
20dc0 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
20dd0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
20de0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
20df0 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
20e00 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
20e10 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
20e20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
20e30 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20   opcodes..**.** 
20e40 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
20e50 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
20e60 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
20e70 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
20e80 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46  G    == SQLITE_F
20e90 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20  UNC_LENGTH.**   
20ea0 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
20eb0 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46  G    == SQLITE_F
20ec0 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20  UNC_TYPEOF.**   
20ed0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
20ee0 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55       == BTREE_BU
20ef0 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46  LKLOAD.**    OPF
20f00 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
20f10 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45   == BTREE_SEEK_E
20f20 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46  Q.**    OPFLAG_F
20f30 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  ORDELETE    == B
20f40 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a  TREE_FORDELETE.*
20f50 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45  *    OPFLAG_SAVE
20f60 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45  POSITION == BTRE
20f70 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a  E_SAVEPOSITION.*
20f80 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44  *    OPFLAG_AUXD
20f90 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45  ELETE    == BTRE
20fa0 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23  E_AUXDELETE.*/.#
20fb0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
20fc0 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
20fd0 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74      /* OP_Insert
20fe0 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  : Set to update 
20ff0 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20  db->nChange */. 
21000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21020 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64      /* Also used
21030 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20   in P2 (not P5) 
21040 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  of OP_Delete */.
21050 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45  #define OPFLAG_E
21060 50 48 45 4d 20 20 20 20 20 20 20 20 20 30 78 30  PHEM         0x0
21070 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  1    /* OP_Colum
21080 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74  n: Ephemeral out
21090 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65  put is ok */.#de
210a0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54  fine OPFLAG_LAST
210b0 52 4f 57 49 44 20 20 20 20 20 30 78 32 30 20 20  ROWID     0x20  
210c0 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
210d0 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  te db->lastRowid
210e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
210f0 41 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20  AG_ISUPDATE     
21100 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73   0x04    /* This
21110 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e   OP_Insert is an
21120 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23   sql UPDATE */.#
21130 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50  define OPFLAG_AP
21140 50 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38  PEND        0x08
21150 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c      /* This is l
21160 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
21170 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ppend */.#define
21180 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
21190 45 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a  ESULT 0x10    /*
211a0 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20   Try to avoid a 
211b0 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73  seek in BtreeIns
211c0 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ert() */.#define
211d0 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20   OPFLAG_ISNOOP  
211e0 20 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a        0x40    /*
211f0 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20   OP_Delete does 
21200 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
21210 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
21220 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
21230 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
21240 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
21250 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  sed for length()
21260 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21270 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
21280 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x80    /* OP_C
21290 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
212a0 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a  for typeof() */.
212b0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42  #define OPFLAG_B
212c0 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30  ULKCSR       0x0
212d0 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  1    /* OP_Open*
212e0 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62  * used to open b
212f0 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64  ulk cursor */.#d
21300 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45  efine OPFLAG_SEE
21310 4b 45 51 20 20 20 20 20 20 20 20 30 78 30 32 20  KEQ        0x02 
21320 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
21330 63 75 72 73 6f 72 20 75 73 65 73 20 45 51 20 73  cursor uses EQ s
21340 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  eek only */.#def
21350 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  ine OPFLAG_FORDE
21360 4c 45 54 45 20 20 20 20 20 30 78 30 38 20 20 20  LETE     0x08   
21370 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75   /* OP_Open shou
21380 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52  ld use BTREE_FOR
21390 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
213a0 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
213b0 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f         0x10    /
213c0 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
213d0 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
213e0 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
213f0 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
21400 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
21410 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
21420 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
21430 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  n */.#define OPF
21440 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
21450 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
21460 44 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73  Delete/Insert: s
21470 61 76 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a  ave cursor pos *
21480 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21490 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 20 30  _AUXDELETE     0
214a0 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x04    /* OP_Del
214b0 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20  ete: index in a 
214c0 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65  DELETE op */.#de
214d0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48  fine OPFLAG_NOCH
214e0 4e 47 5f 4d 41 47 49 43 20 20 30 78 36 64 20 20  NG_MAGIC  0x6d  
214f0 20 20 2f 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f    /* OP_MakeReco
21500 72 64 3a 20 73 65 72 69 61 6c 74 79 70 65 20 31  rd: serialtype 1
21510 30 20 69 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20  0 is ok */../*. 
21520 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70  * Each trigger p
21530 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
21540 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
21550 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e   stored as an in
21560 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72  stance of. * str
21570 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a  uct Trigger.. *.
21580 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69   * Pointers to i
21590 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
215a0 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73  ct Trigger are s
215b0 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79  tored in two way
215c0 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20  s.. * 1. In the 
215d0 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20  "trigHash" hash 
215e0 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74  table (part of t
215f0 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74  he sqlite3* that
21600 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a   represents the.
21610 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e   *    database).
21620 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69   This allows Tri
21630 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20  gger structures 
21640 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20  to be retrieved 
21650 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41  by name.. * 2. A
21660 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f  ll triggers asso
21670 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69  ciated with a si
21680 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20  ngle table form 
21690 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75  a linked list, u
216a0 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70  sing the. *    p
216b0 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73  Next member of s
216c0 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41  truct Trigger. A
216d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
216e0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
216f0 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65   the. *    linke
21700 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64  d list is stored
21710 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65   as the "pTrigge
21720 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  r" member of the
21730 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20   associated. *  
21740 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a    struct Table..
21750 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f   *. * The "step_
21760 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69  list" member poi
21770 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
21780 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69   element of a li
21790 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e  nked list. * con
217a0 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
217b0 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
217c0 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67  fied as the trig
217d0 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f  ger program.. */
217e0 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20  .struct Trigger 
217f0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
21800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
21810 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
21820 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20  rigger          
21830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
21840 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20  .  char *table; 
21850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
21860 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
21870 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
21880 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a  gger applies */.
21890 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
218a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
218b0 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
218c0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
218d0 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ERT         */. 
218e0 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20   u8 tr_tm;      
218f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
21900 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  of TRIGGER_BEFOR
21910 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  E, TRIGGER_AFTER
21920 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
21930 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
21940 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   The WHEN clause
21950 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
21960 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  on (may be NULL)
21970 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43   */.  IdList *pC
21980 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a  olumns;       /*
21990 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55   If this is an U
219a0 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e  PDATE OF <column
219b0 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a  -list> trigger,.
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
219e0 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69   <column-list> i
219f0 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  s stored here */
21a00 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
21a10 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63  ma;        /* Sc
21a20 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
21a30 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  the trigger */. 
21a40 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68   Schema *pTabSch
21a50 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
21a60 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
21a70 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69  e table */.  Tri
21a80 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c  ggerStep *step_l
21a90 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73  ist; /* Link lis
21aa0 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f  t of trigger pro
21ab0 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20  gram steps      
21ac0 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67         */.  Trig
21ad0 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ger *pNext;     
21ae0 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67      /* Next trig
21af0 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
21b00 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ith the table */
21b10 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69  .};../*.** A tri
21b20 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61  gger is either a
21b30 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46   BEFORE or an AF
21b40 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68  TER trigger.  Th
21b50 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73  e following cons
21b60 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69  tants.** determi
21b70 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20  ne which..**.** 
21b80 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
21b90 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
21ba0 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
21bb0 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
21bc0 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
21bd0 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
21be0 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
21bf0 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
21c00 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
21c10 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
21c20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
21c30 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
21c40 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
21c50 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
21c60 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
21c70 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
21c80 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
21c90 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
21ca0 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
21cb0 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  ram.. *. * Insta
21cc0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
21cd0 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
21ce0 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
21cf0 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
21d00 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
21d10 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
21d20 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
21d30 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
21d40 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20   member of the. 
21d50 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
21d60 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
21d70 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
21d80 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
21d90 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
21da0 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
21db0 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
21dc0 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68  rogram.. *. * Th
21dd0 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
21de0 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
21df0 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
21e00 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
21e10 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
21e20 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
21e30 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
21e40 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
21e50 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
21e60 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65   by the. * value
21e70 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
21e80 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
21e90 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
21ea0 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
21eb0 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
21ec0 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
21ed0 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
21ee0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
21ef0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
21f00 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
21f10 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
21f20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
21f30 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
21f40 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
21f50 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
21f60 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74  NULL.. * zTarget
21f70 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
21f80 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
21f90 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e   to insert into.
21fa0 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
21fb0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
21fc0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56  NSERT INTO ... V
21fd0 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d  ALUES ... statem
21fe0 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
21ff0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
22000 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20  tores values to 
22010 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68  be inserted. Oth
22020 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
22030 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20  pIdList   -> If 
22040 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
22050 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c  T INTO ... (<col
22060 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55  umn-names>) VALU
22070 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20  ES .... *       
22080 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
22090 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72  , then this stor
220a0 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61  es the column-na
220b0 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20  mes to be. *    
220c0 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
220d0 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28  ed into.. *. * (
220e0 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29  op == TK_DELETE)
220f0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
22100 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
22110 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64  f the table to d
22120 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70  elete from.. * p
22130 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
22140 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
22150 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
22160 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
22170 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
22180 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
22190 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20  ise NULL.. *. * 
221a0 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45  (op == TK_UPDATE
221b0 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  ). * zTarget   -
221c0 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
221d0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
221e0 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72  update.. * pWher
221f0 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
22200 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
22210 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
22220 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
22230 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
22240 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
22250 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
22260 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
22270 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
22280 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
22290 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
222a0 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
222b0 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
222c0 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
222d0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
222e0 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
222f0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
22300 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74  ument.. *. */.st
22310 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
22320 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
22330 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
22340 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
22350 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
22360 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
22370 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
22380 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
22390 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
223a0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
223b0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
223c0 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
223d0 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
223e0 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
223f0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
22400 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
22410 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
22420 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e   INTO SELECT ...
22430 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72   */.  char *zTar
22440 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61  get;       /* Ta
22450 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44  rget table for D
22460 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49  ELETE, UPDATE, I
22470 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20  NSERT */.  Expr 
22480 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
22490 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
224a0 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f  use for DELETE o
224b0 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  r UPDATE steps *
224c0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
224d0 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20  xprList; /* SET 
224e0 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
224f0 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  E. */.  IdList *
22500 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
22510 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
22520 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68 61   INSERT */.  cha
22530 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
22540 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51    /* Original SQ
22550 4c 20 74 65 78 74 20 6f 66 20 74 68 69 73 20 63  L text of this c
22560 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67  ommand */.  Trig
22570 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
22580 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
22590 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
225a0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
225b0 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
225c0 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
225d0 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
225e0 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
225f0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
22600 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
22610 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
22620 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
22630 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
22640 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
22650 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
22660 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
22670 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
22680 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f  .** explicit..*/
22690 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
226a0 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
226b0 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
226c0 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
226d0 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
226e0 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
226f0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
22700 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
22710 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
22720 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
22730 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
22740 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f  a */.  int bVarO
22750 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68  nly;       /* Ch
22760 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65  eck for variable
22770 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79   references only
22780 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
22790 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
227a0 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
227b0 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
227c0 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
227d0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
227e0 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
227f0 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
22800 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
22810 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
22820 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
22830 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
22840 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
22850 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
22860 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
22870 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
22880 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
22890 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
228a0 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
228b0 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
228c0 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
228d0 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
228e0 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
228f0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
22900 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c  StrAccum {.  sql
22910 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
22920 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61    /* Optional da
22930 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61  tabase for looka
22940 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55  side.  Can be NU
22950 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  LL */.  char *zT
22960 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
22970 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
22980 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
22990 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20   u32  nAlloc;   
229a0 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20        /* Amount 
229b0 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  of space allocat
229c0 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20  ed in zText */. 
229d0 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20   u32  mxAlloc;  
229e0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
229f0 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74   allowed allocat
22a00 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d  ion.  0 for no m
22a10 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20  alloc usage */. 
22a20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20   u32  nChar;    
22a30 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
22a40 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
22a50 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61   far */.  u8   a
22a60 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f  ccError;       /
22a70 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  * STRACCUM_NOMEM
22a80 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f   or STRACCUM_TOO
22a90 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72  BIG */.  u8   pr
22aa0 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a  intfFlags;    /*
22ab0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66   SQLITE_PRINTF f
22ac0 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  lags below */.};
22ad0 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55  .#define STRACCU
22ae0 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66  M_NOMEM   1.#def
22af0 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f  ine STRACCUM_TOO
22b00 42 49 47 20 20 32 0a 23 64 65 66 69 6e 65 20 53  BIG  2.#define S
22b10 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54  QLITE_PRINTF_INT
22b20 45 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49  ERNAL 0x01  /* I
22b30 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79  nternal-use-only
22b40 20 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f   converters allo
22b50 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wed */.#define S
22b60 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c  QLITE_PRINTF_SQL
22b70 46 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53  FUNC  0x02  /* S
22b80 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75  QL function argu
22b90 6d 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74  ments to VXPrint
22ba0 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  f */.#define SQL
22bb0 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f  ITE_PRINTF_MALLO
22bc0 43 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75  CED 0x04  /* Tru
22bd0 65 20 69 66 20 78 54 65 78 74 20 69 73 20 61 6c  e if xText is al
22be0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f  located space */
22bf0 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c  ..#define isMall
22c00 6f 63 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e  oced(X)  (((X)->
22c10 70 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51  printfFlags & SQ
22c20 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c  LITE_PRINTF_MALL
22c30 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a  OCED)!=0).../*.*
22c40 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * A pointer to t
22c50 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
22c60 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69   used to communi
22c70 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cate information
22c80 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
22c90 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73  Init and OP_Pars
22ca0 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65  eSchema into the
22cb0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
22cc0 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  back..*/.typedef
22cd0 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69   struct {.  sqli
22ce0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
22cf0 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
22d00 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
22d10 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  d */.  char **pz
22d20 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72  ErrMsg;    /* Er
22d30 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72  ror message stor
22d40 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74  ed here */.  int
22d50 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
22d60 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64   /* 0 for main d
22d70 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20  atabase.  1 for 
22d80 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54  TEMP, 2.. for AT
22d90 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20  TACHed */.  int 
22da0 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
22db0 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73  /* Result code s
22dc0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20  tored here */.} 
22dd0 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
22de0 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
22df0 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
22e00 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
22e10 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
22e20 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
22e30 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
22e40 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
22e50 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
22e60 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
22e70 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
22e80 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
22eb0 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
22ec0 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
22ed0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
22ee0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
22ef0 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
22f00 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
22f10 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
22f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22f30 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
22f40 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
22f50 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69  /.  int bOpenUri
22f60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22f70 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
22f80 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
22f90 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
22fa0 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20    int bUseCis;  
22fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fc0 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72      /* Use cover
22fd0 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20  ing indices for 
22fe0 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20  full-scans */.  
22ff0 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63  int bSmallMalloc
23000 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23010 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67 65    /* Avoid large
23020 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
23030 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ons if true */. 
23040 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20   int mxStrlen;  
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23060 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74     /* Maximum st
23070 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
23080 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70   int neverCorrup
23090 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
230a0 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69     /* Database i
230b0 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f  s always well-fo
230c0 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  rmed */.  int sz
230d0 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
230e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
230f0 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
23100 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a   buffer size */.
23110 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65    int nLookaside
23120 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23130 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
23140 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
23150 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  count */.  int n
23160 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20  StmtSpill;      
23170 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23180 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69  Stmt-journal spi
23190 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73  ll-to-disk thres
231a0 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65  hold */.  sqlite
231b0 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b  3_mem_methods m;
231c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
231d0 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
231e0 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72  allocation inter
231f0 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
23200 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
23210 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c  mutex;      /* L
23220 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69  ow-level mutex i
23230 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
23240 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
23250 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20  hods2 pcache2;  
23260 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67  /* Low-level pag
23270 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63  e-cache interfac
23280 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65  e */.  void *pHe
23290 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
232a0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70           /* Heap
232b0 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a   storage space *
232c0 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20  /.  int nHeap;  
232d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232e0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
232f0 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e   pHeap[] */.  in
23300 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20  t mnReq, mxReq; 
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68  /* Min and max h
23330 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a  eap requests siz
23340 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  es */.  sqlite3_
23350 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20  int64 szMmap;   
23360 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61            /* mma
23370 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70  p() space per op
23380 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c  en file */.  sql
23390 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61  ite3_int64 mxMma
233a0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
233b0 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  * Maximum value 
233c0 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20  for szMmap */.  
233d0 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20  void *pPage;    
233e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233f0 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
23400 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
23410 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  szPage;         
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23430 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61   Size of each pa
23440 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  ge in pPage[] */
23450 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20  .  int nPage;   
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23470 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
23480 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65  f pages in pPage
23490 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61  [] */.  int mxPa
234a0 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20  rserStack;      
234b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78            /* max
234c0 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68  imum depth of th
234d0 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a  e parser stack *
234e0 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61  /.  int sharedCa
234f0 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  cheEnabled;     
23500 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66        /* true if
23510 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
23520 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  de enabled */.  
23530 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20  u32 szPma;      
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23550 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72    /* Maximum Sor
23560 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a  ter PMA size */.
23570 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
23580 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
23590 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
235a0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
235b0 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
235c0 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
235d0 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
235e0 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
23610 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
23620 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
23630 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
23640 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
23650 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
23660 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
23670 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
23680 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
23690 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
236a0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
236b0 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
236c0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
236d0 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
236e0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
236f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
23700 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
23710 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
23720 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
23730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23740 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
23750 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
23760 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
23770 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
23780 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
23790 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
237a0 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
237b0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
237c0 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
237d0 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
237e0 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
237f0 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
23800 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
23810 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
23820 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
23830 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
23840 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
23850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23860 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
23870 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
23880 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
23890 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
238a0 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
238b0 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
238c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
238d0 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
238e0 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
238f0 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
23900 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
23910 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
23920 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
23930 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
23940 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
23950 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
23960 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
23970 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
23980 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
23990 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
239a0 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
239b0 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20  anch)(void*,int 
239c0 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
239d0 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
239e0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
239f0 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
23a00 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
23a30 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
23a40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23a50 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e 74  UNTESTABLE.  int
23a60 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b   (*xTestCallback
23a70 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f  )(int);        /
23a80 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c  * Invoked by sql
23a90 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a  ite3FaultSim() *
23aa0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62  /.#endif.  int b
23ab0 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20  LocaltimeFault; 
23ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23ad0 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63  True to fail loc
23ae0 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a  altime() calls *
23af0 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65 73  /.  int iOnceRes
23b00 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20 20  etThreshold;    
23b10 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f        /* When to
23b20 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63   reset OP_Once c
23b30 6f 75 6e 74 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f  ounters */.};../
23b40 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20  *.** This macro 
23b50 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f  is used inside o
23b60 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  f assert() state
23b70 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74  ments to indicat
23b80 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73  e that.** the as
23b90 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c  sert is only val
23ba0 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72  id on a well-for
23bb0 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49  med database.  I
23bc0 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a  nstead of:.**.**
23bd0 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29       assert( X )
23be0 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74  ;.**.** One writ
23bf0 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  es:.**.**     as
23c00 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55  sert( X || CORRU
23c10 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43  PT_DB );.**.** C
23c20 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75  ORRUPT_DB is tru
23c30 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20  e during normal 
23c40 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52  operation.  CORR
23c50 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20  UPT_DB does not 
23c60 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74  indicate.** that
23c70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
23c80 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72   definitely corr
23c90 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69  upt, only that i
23ca0 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75  t might be corru
23cb0 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20  pt..** For most 
23cc0 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52  test cases, CORR
23cd0 55 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f  UPT_DB is set to
23ce0 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73   false using a s
23cf0 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65  pecial.** sqlite
23d00 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29  3_test_control()
23d10 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20  .  This enables 
23d20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
23d30 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20  nts to prove.** 
23d40 74 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20  things that are 
23d50 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20  always true for 
23d60 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
23d70 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  bases..*/.#defin
23d80 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73  e CORRUPT_DB  (s
23d90 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76  qlite3Config.nev
23da0 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f  erCorrupt==0)../
23db0 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69  *.** Context poi
23dc0 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e  nter passed down
23dd0 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65   through the tre
23de0 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63  e-walk..*/.struc
23df0 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72  t Walker {.  Par
23e00 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72         /* Parser
23e30 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20   context.  */.  
23e40 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62  int (*xExprCallb
23e50 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78  ack)(Walker*, Ex
23e60 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c  pr*);     /* Cal
23e70 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73  lback for expres
23e80 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28  sions */.  int (
23e90 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
23ea0 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
23eb0 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  *);  /* Callback
23ec0 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
23ed0 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74    void (*xSelect
23ee0 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65  Callback2)(Walke
23ef0 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53  r*,Select*);/* S
23f00 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66  econd callback f
23f10 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
23f20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b  int walkerDepth;
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
23f50 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65  ber of subquerie
23f60 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b  s */.  u8 eCode;
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f90 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63   /* A small proc
23fa0 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20  essing code */. 
23fb0 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20   union {        
23fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
23fe0 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c  tra data for cal
23ff0 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d  lback */.    Nam
24000 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20  eContext *pNC;  
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67         /* Naming
24030 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
24040 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
24070 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e  ounter */.    in
24080 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20  t iCur;         
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240a0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72          /* A cur
240b0 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
240c0 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
240d0 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
240e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
240f0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
24100 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e    struct SrcCoun
24110 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20  t *pSrcCount;   
24120 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
24130 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72  ounting column r
24140 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20  eferences */.   
24150 20 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74   struct CCurHint
24160 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20   *pCCurHint;    
24170 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
24180 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72  ed by codeCursor
24190 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e  Hint() */.    in
241a0 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20  t *aiCol;       
241b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241c0 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79          /* array
241d0 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78   of column index
241e0 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  es */.    struct
241f0 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43   IdxCover *pIdxC
24200 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  over;           
24210 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72      /* Check for
24220 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20   index coverage 
24230 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64  */.    struct Id
24240 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78  xExprTrans *pIdx
24250 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
24260 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 6e 64 65   /* Convert inde
24270 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75  xed expr to colu
24280 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  mn */.    ExprLi
24290 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
242a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242b0 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20      /* GROUP BY 
242c0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74  clause */.    st
242d0 72 75 63 74 20 48 61 76 69 6e 67 54 6f 57 68 65  ruct HavingToWhe
242e0 72 65 43 74 78 20 2a 70 48 61 76 69 6e 67 43 74  reCtx *pHavingCt
242f0 78 3b 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e  x;      /* HAVIN
24300 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73  G to WHERE claus
24310 65 20 63 74 78 20 2a 2f 0a 20 20 7d 20 75 3b 0a  e ctx */.  } u;.
24320 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
24330 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
24340 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
24350 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
24360 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
24370 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
24380 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
24390 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
243a0 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
243b0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
243c0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
243d0 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
243e0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
243f0 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
24400 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
24410 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
24420 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b  xprWalkNoop(Walk
24430 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
24440 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
24450 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
24460 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
24470 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46  lite3SelectWalkF
24480 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ail(Walker*, Sel
24490 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  ect*);.#ifdef SQ
244a0 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20  LITE_DEBUG.void 
244b0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
244c0 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a  kAssert2(Walker*
244d0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64  , Select*);.#end
244e0 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
244f0 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70   code from the p
24500 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e  arse-tree walkin
24510 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64  g primitives and
24520 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61   their.** callba
24530 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  cks..*/.#define 
24540 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20  WRC_Continue    
24550 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20  0   /* Continue 
24560 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72  down into childr
24570 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  en */.#define WR
24580 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20  C_Prune       1 
24590 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72    /* Omit childr
245a0 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20  en but continue 
245b0 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73  walking siblings
245c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
245d0 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20  Abort       2   
245e0 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74  /* Abandon the t
245f0 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a  ree walk */../*.
24600 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
24610 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
24620 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
24630 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  t of one or more
24640 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e   CTEs.** (common
24650 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
24660 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61  ns) created by a
24670 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
24680 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  use..*/.struct W
24690 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65  ith {.  int nCte
246a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
246b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
246c0 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65  r of CTEs in the
246d0 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a   WITH clause */.
246e0 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20    With *pOuter; 
246f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24700 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20    /* Containing 
24710 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
24720 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74  NULL */.  struct
24730 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20   Cte {          
24740 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
24750 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65   each CTE in the
24760 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e   WITH clause....
24770 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
24780 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
24790 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
247a0 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
247b0 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f     ExprList *pCo
247c0 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ls;             
247d0 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78     /* List of ex
247e0 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61  plicit column na
247f0 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  mes, or NULL */.
24800 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
24810 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
24820 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e      /* The defin
24830 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54  ition of this CT
24840 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63  E */.    const c
24850 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20  har *zCteErr;   
24860 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
24870 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69  r message for ci
24880 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65  rcular reference
24890 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d  s */.  } a[1];.}
248a0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
248b0 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20  _DEBUG./*.** An 
248c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
248d0 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20  TreeView object 
248e0 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e  is used for prin
248f0 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
24900 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75   of.** data stru
24910 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65  ctures on sqlite
24920 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75  3DebugPrintf() u
24930 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65  sing a tree-like
24940 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74   view..*/.struct
24950 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e   TreeView {.  in
24960 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
24970 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c        /* Which l
24980 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65  evel of the tree
24990 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20   we are on */.  
249a0 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20  u8  bLine[100]; 
249b0 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20          /* Draw 
249c0 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75  vertical in colu
249d0 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d  mn i if bLine[i]
249e0 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23   is true */.};.#
249f0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
24a00 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  DEBUG */../*.** 
24a10 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69  Assuming zIn poi
24a20 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
24a30 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38   byte of a UTF-8
24a40 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61   character,.** a
24a50 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f  dvance zIn to po
24a60 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74  int to the first
24a70 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78   byte of the nex
24a80 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  t UTF-8 characte
24a90 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
24aa0 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a  LITE_SKIP_UTF8(z
24ab0 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20  In) {           
24ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
24ad0 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e   if( (*(zIn++))>
24ae0 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20  =0xc0 ){        
24af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b00 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c        \.    whil
24b10 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29  e( (*zIn & 0xc0)
24b20 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b  ==0x80 ){ zIn++;
24b30 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c   }             \
24b40 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  .  }            
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b70 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a          \.}../*.
24b80 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f  ** The SQLITE_*_
24b90 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20  BKPT macros are 
24ba0 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20  substitutes for 
24bb0 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20  the error codes 
24bc0 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65  with.** the same
24bd0 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75   name but withou
24be0 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66  t the _BKPT suff
24bf0 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f  ix.  These macro
24c00 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74  s invoke.** rout
24c10 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74  ines that report
24c20 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72   the line-number
24c30 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72   on which the er
24c40 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a  ror originated.*
24c50 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  * using sqlite3_
24c60 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74  log().  The rout
24c70 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64  ines also provid
24c80 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70  e a convenient p
24c90 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61  lace.** to set a
24ca0 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70   debugger breakp
24cb0 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oint..*/.int sql
24cc0 69 74 65 33 52 65 70 6f 72 74 45 72 72 6f 72 28  ite3ReportError(
24cd0 69 6e 74 20 69 45 72 72 2c 20 69 6e 74 20 6c 69  int iErr, int li
24ce0 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61 72  neno, const char
24cf0 20 2a 7a 54 79 70 65 29 3b 0a 69 6e 74 20 73 71   *zType);.int sq
24d00 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
24d10 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
24d20 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
24d30 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
24d40 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e  CantopenError(in
24d50 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  t);.#define SQLI
24d60 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
24d70 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
24d80 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
24d90 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53  efine SQLITE_MIS
24da0 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  USE_BKPT sqlite3
24db0 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49  MisuseError(__LI
24dc0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
24dd0 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b  LITE_CANTOPEN_BK
24de0 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  PT sqlite3Cantop
24df0 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  enError(__LINE__
24e00 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ).#ifdef SQLITE_
24e10 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69  DEBUG.  int sqli
24e20 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e  te3NomemError(in
24e30 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
24e40 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72  3IoerrnomemError
24e50 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
24e60 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45  ite3CorruptPgnoE
24e70 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29 3b 0a  rror(int,Pgno);.
24e80 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
24e90 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74  NOMEM_BKPT sqlit
24ea0 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c  e3NomemError(__L
24eb0 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20  INE__).# define 
24ec0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
24ed0 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 49  EM_BKPT sqlite3I
24ee0 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f  oerrnomemError(_
24ef0 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e  _LINE__).# defin
24f00 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
24f10 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33  _PGNO(P) sqlite3
24f20 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72  CorruptPgnoError
24f30 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a 23  (__LINE__,(P)).#
24f40 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51  else.# define SQ
24f50 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  LITE_NOMEM_BKPT 
24f60 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64  SQLITE_NOMEM.# d
24f70 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45  efine SQLITE_IOE
24f80 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51  RR_NOMEM_BKPT SQ
24f90 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
24fa0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
24fb0 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29  _CORRUPT_PGNO(P)
24fc0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
24fd0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
24fe0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  endif../*.** FTS
24ff0 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74 68 20  3 and FTS4 both 
25000 72 65 71 75 69 72 65 20 76 69 72 74 75 61 6c 20  require virtual 
25010 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f  table support.*/
25020 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
25030 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
25040 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66 20 53  TABLE).# undef S
25050 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
25060 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  3.# undef SQLITE
25070 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e  _ENABLE_FTS4.#en
25080 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20  dif../*.** FTS4 
25090 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74  is really an ext
250a0 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e  ension for FTS3.
250b0 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20    It is enabled 
250c0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c  using the.** SQL
250d0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
250e0 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61  macro.  But to a
250f0 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  void confusion w
25100 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74  e also call.** t
25110 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
25120 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73  _FTS4 macro to s
25130 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73  erve as an alias
25140 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42   for SQLITE_ENAB
25150 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20  LE_FTS3..*/.#if 
25160 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
25170 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21  NABLE_FTS4) && !
25180 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
25190 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65  NABLE_FTS3).# de
251a0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
251b0 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66  LE_FTS3 1.#endif
251c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70  ../*.** The ctyp
251d0 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65  e.h header is ne
251e0 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43  eded for non-ASC
251f0 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20  II systems.  It 
25200 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65  is also.** neede
25210 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46  d by FTS3 when F
25220 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20  TS3 is included 
25230 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74  in the amalgamat
25240 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ion..*/.#if !def
25250 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49  ined(SQLITE_ASCI
25260 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66  I) || \.    (def
25270 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
25280 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69  LE_FTS3) && defi
25290 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47  ned(SQLITE_AMALG
252a0 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c  AMATION)).# incl
252b0 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65  ude <ctype.h>.#e
252c0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
252d0 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
252e0 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64   mimic the stand
252f0 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63  ard library func
25300 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c  tions toupper(),
25310 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69  .** isspace(), i
25320 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69  salnum(), isdigi
25330 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74  t() and isxdigit
25340 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  (), respectively
25350 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20  . The.** sqlite 
25360 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f  versions only wo
25370 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  rk for ASCII cha
25380 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c  racters, regardl
25390 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a  ess of locale..*
253a0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
253b0 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73  ASCII.# define s
253c0 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
253d0 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33    ((x)&~(sqlite3
253e0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
253f0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32  ed char)(x)]&0x2
25400 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  0)).# define sql
25410 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
25420 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
25430 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
25440 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65  )(x)]&0x01).# de
25450 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
25460 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65  num(x)   (sqlite
25470 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
25480 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
25490 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  06).# define sql
254a0 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
254b0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
254c0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
254d0 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65  )(x)]&0x02).# de
254e0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
254f0 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65  git(x)   (sqlite
25500 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
25510 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
25520 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  04).# define sql
25530 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
25540 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
25550 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
25560 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65  )(x)]&0x08).# de
25570 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
25580 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65  wer(x)   (sqlite
25590 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75  3UpperToLower[(u
255a0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
255b0 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  ]).# define sqli
255c0 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20  te3Isquote(x)   
255d0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
255e0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
255f0 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c 73 65  (x)]&0x80).#else
25600 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25610 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f  3Toupper(x)   to
25620 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20  upper((unsigned 
25630 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
25640 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
25650 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28  e(x)   isspace((
25660 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25670 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
25680 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
25690 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65  isalnum((unsigne
256a0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
256b0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
256c0 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61  pha(x)   isalpha
256d0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
256e0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
256f0 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
25700 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67    isdigit((unsig
25710 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
25720 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25730 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69  xdigit(x)  isxdi
25740 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
25750 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
25760 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
25770 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e  x)   tolower((un
25780 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
25790 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
257a0 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28 28  3Isquote(x)   ((
257b0 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27 5c  x)=='"'||(x)=='\
257c0 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28 78  ''||(x)=='['||(x
257d0 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a 23  )=='`').#endif.#
257e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
257f0 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
25800 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74  _DIAGS.int sqlit
25810 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
25820 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
25830 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20  ternal function 
25840 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e  prototypes.*/.in
25850 74 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  t sqlite3StrICmp
25860 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
25870 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
25880 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63  qlite3Strlen30(c
25890 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
258a0 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  r *sqlite3Column
258b0 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61  Type(Column*,cha
258c0 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
258d0 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c  ite3StrNICmp sql
258e0 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69  ite3_strnicmp..i
258f0 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
25900 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  Init(void);.void
25910 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e   sqlite3MallocEn
25920 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73  d(void);.void *s
25930 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34  qlite3Malloc(u64
25940 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
25950 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b  MallocZero(u64);
25960 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
25970 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74  MallocZero(sqlit
25980 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
25990 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
259a0 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  Raw(sqlite3*, u6
259b0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
259c0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73  3DbMallocRawNN(s
259d0 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63  qlite3*, u64);.c
259e0 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
259f0 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  rDup(sqlite3*,co
25a00 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
25a10 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44   *sqlite3DbStrND
25a20 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
25a30 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63  t char*, u64);.c
25a40 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 70  har *sqlite3DbSp
25a50 61 6e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  anDup(sqlite3*,c
25a60 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
25a70 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73   char*);.void *s
25a80 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
25a90 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  id*, u64);.void 
25aa0 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
25ab0 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
25ac0 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
25ad0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
25ae0 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
25af0 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
25b00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
25b10 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
25b20 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
25b30 65 33 44 62 46 72 65 65 4e 4e 28 73 71 6c 69 74  e3DbFreeNN(sqlit
25b40 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74  e3*, void*);.int
25b50 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69   sqlite3MallocSi
25b60 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  ze(void*);.int s
25b70 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69  qlite3DbMallocSi
25b80 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ze(sqlite3*, voi
25b90 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
25ba0 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74  e3PageMalloc(int
25bb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
25bc0 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  ageFree(void*);.
25bd0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53  void sqlite3MemS
25be0 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b  etDefault(void);
25bf0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25c00 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20  UNTESTABLE.void 
25c10 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c  sqlite3BenignMal
25c20 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a  locHooks(void (*
25c30 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a  )(void), void (*
25c40 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66  )(void));.#endif
25c50 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70  .int sqlite3Heap
25c60 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29  NearlyFull(void)
25c70 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74  ;../*.** On syst
25c80 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73  ems with ample s
25c90 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74  tack space and t
25ca0 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f  hat support allo
25cb0 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73  ca(), make.** us
25cc0 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f  e of alloca() to
25cd0 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f   obtain space fo
25ce0 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69  r large automati
25cf0 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64  c objects.  By d
25d00 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69  efault,.** obtai
25d10 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c  n space from mal
25d20 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  loc()..**.** The
25d30 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e   alloca() routin
25d40 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20  e never returns 
25d50 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c  NULL.  This will
25d60 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68   cause code path
25d70 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77  s.** that deal w
25d80 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ith sqlite3Stack
25d90 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73  Alloc() failures
25da0 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62   to be unreachab
25db0 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
25dc0 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a  LITE_USE_ALLOCA.
25dd0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25de0 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
25df0 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23  N)   alloca(N).#
25e00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
25e10 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
25e20 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63  N)  memset(alloc
25e30 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65  a(N), 0, N).# de
25e40 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
25e50 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65  kFree(D,P).#else
25e60 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25e70 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
25e80 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  ,N)   sqlite3DbM
25e90 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20  allocRaw(D,N).# 
25ea0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
25eb0 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
25ec0 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  )  sqlite3DbMall
25ed0 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65  ocZero(D,N).# de
25ee0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
25ef0 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
25f00 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44   sqlite3DbFree(D
25f10 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ,P).#endif../* D
25f20 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68  o not allow both
25f30 20 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d   MEMSYS5 and MEM
25f40 53 59 53 33 20 74 6f 20 62 65 20 64 65 66 69 6e  SYS3 to be defin
25f50 65 64 20 74 6f 67 65 74 68 65 72 2e 20 20 49 66  ed together.  If
25f60 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69   they.** are, di
25f70 73 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f  sable MEMSYS3.*/
25f80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
25f90 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f  NABLE_MEMSYS5.co
25fa0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
25fb0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
25fc0 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f  MemGetMemsys5(vo
25fd0 69 64 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49  id);.#undef SQLI
25fe0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
25ff0 33 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  3.#endif.#ifdef 
26000 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
26010 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS3.const sqli
26020 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
26030 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
26040 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e  msys3(void);.#en
26050 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
26060 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
26070 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
26080 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
26090 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
260a0 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
260b0 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
260c0 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
260d0 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
260e0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
260f0 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
26100 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
26110 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
26120 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
26130 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
26140 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  id);.#endif.#if 
26150 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
26160 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21  MUTEX_OMIT) && !
26170 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
26180 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69  UTEX_NOOP).  voi
26190 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42  d sqlite3MemoryB
261a0 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65  arrier(void);.#e
261b0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
261c0 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
261d0 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69  r().#endif..sqli
261e0 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
261f0 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74  3StatusValue(int
26200 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26210 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74  tatusUp(int, int
26220 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26230 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69  tatusDown(int, i
26240 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26250 33 53 74 61 74 75 73 48 69 67 68 77 61 74 65 72  3StatusHighwater
26260 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  (int, int);.int 
26270 73 71 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65  sqlite3Lookaside
26280 55 73 65 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Used(sqlite3*,in
26290 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20  t*);../* Access 
262a0 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20  to mutexes used 
262b0 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75  by sqlite3_statu
262c0 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d  s() */.sqlite3_m
262d0 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61  utex *sqlite3Pca
262e0 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b  che1Mutex(void);
262f0 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
26300 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74  sqlite3MallocMut
26310 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64  ex(void);..#if d
26320 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
26330 41 42 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41 44  ABLE_MULTITHREAD
26340 45 44 5f 43 48 45 43 4b 53 29 20 26 26 20 21 64  ED_CHECKS) && !d
26350 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
26360 54 45 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73  TEX_OMIT).void s
26370 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f  qlite3MutexWarnO
26380 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69  nContention(sqli
26390 74 65 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c  te3_mutex*);.#el
263a0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
263b0 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f  te3MutexWarnOnCo
263c0 6e 74 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64  ntention(x).#end
263d0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
263e0 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
263f0 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c  _POINT.  int sql
26400 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
26410 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
26420 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58  e sqlite3IsNaN(X
26430 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )  0.#endif../*.
26440 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
26450 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
26460 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
26470 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
26480 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f  t SQL.** functio
26490 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  ns arguments tha
264a0 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65  t are the parame
264b0 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e  ters to the prin
264c0 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  tf() function..*
264d0 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41  /.struct PrintfA
264e0 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74  rguments {.  int
264f0 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
26500 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e        /* Total n
26510 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
26520 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65  ts */.  int nUse
26530 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
26540 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
26550 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20  guments used so 
26560 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  far */.  sqlite3
26570 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20  _value **apArg; 
26580 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e    /* The argumen
26590 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  t values */.};..
265a0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72  void sqlite3VXPr
265b0 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
265c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
265d0 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  list);.void sqli
265e0 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
265f0 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  cum*, const char
26600 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
26610 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71  qlite3MPrintf(sq
26620 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
26630 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
26640 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28  sqlite3VMPrintf(
26650 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
26660 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
26670 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
26680 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
26690 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45  ined(SQLITE_HAVE
266a0 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69  _OS_TRACE).  voi
266b0 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
266c0 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
266d0 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
266e0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
266f0 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
26700 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
26710 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
26720 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
26730 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
26740 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
26750 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28  te3TreeViewExpr(
26760 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
26770 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76   Expr*, u8);.  v
26780 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
26790 69 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28  iewBareExprList(
267a0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
267b0 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
267c0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
267d0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
267e0 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
267f0 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
26800 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  st*, u8, const c
26810 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
26820 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c  lite3TreeViewSel
26830 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ect(TreeView*, c
26840 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38  onst Select*, u8
26850 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
26860 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72  3TreeViewWith(Tr
26870 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57  eeView*, const W
26880 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  ith*, u8);.#endi
26890 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
268a0 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
268b0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
268c0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
268d0 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
268e0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
268f0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
26900 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
26910 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
26920 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b  te3TokenInit(Tok
26930 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20  en*,char*);.int 
26940 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f  sqlite3KeywordCo
26950 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  de(const unsigne
26960 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  d char*, int);.i
26970 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72  nt sqlite3RunPar
26980 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ser(Parse*, cons
26990 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a  t char*, char **
269a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
269b0 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73  inishCoding(Pars
269c0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
269d0 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65  GetTempReg(Parse
269e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
269f0 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50  ReleaseTempReg(P
26a00 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
26a10 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61  sqlite3GetTempRa
26a20 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  nge(Parse*,int);
26a30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
26a40 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61  easeTempRange(Pa
26a50 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  rse*,int,int);.v
26a60 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72  oid sqlite3Clear
26a70 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72  TempRegCache(Par
26a80 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  se*);.#ifdef SQL
26a90 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
26aa0 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61  lite3NoTempsInRa
26ab0 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
26ac0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72  nt);.#endif.Expr
26ad0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c   *sqlite3ExprAll
26ae0 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
26af0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74  const Token*,int
26b00 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
26b10 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Expr(sqlite3*,in
26b20 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
26b30 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26b40 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73  AttachSubtrees(s
26b50 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78  qlite3*,Expr*,Ex
26b60 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
26b70 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50   *sqlite3PExpr(P
26b80 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
26b90 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
26ba0 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64 53  sqlite3PExprAddS
26bb0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78  elect(Parse*, Ex
26bc0 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45  pr*, Select*);.E
26bd0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
26be0 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  And(sqlite3*,Exp
26bf0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  r*, Expr*);.Expr
26c00 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e   *sqlite3ExprFun
26c10 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70  ction(Parse*,Exp
26c20 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rList*, Token*);
26c30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26c40 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72  rAssignVarNumber
26c50 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
26c60 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
26c70 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c  e3ExprDelete(sql
26c80 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  ite3*, Expr*);.E
26c90 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
26ca0 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50  ExprListAppend(P
26cb0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
26cc0 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
26cd0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
26ce0 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61  tAppendVector(Pa
26cf0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49  rse*,ExprList*,I
26d00 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76  dList*,Expr*);.v
26d10 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
26d20 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28  istSetSortOrder(
26d30 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
26d40 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26d50 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73  ListSetName(Pars
26d60 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b  e*,ExprList*,Tok
26d70 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
26d80 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
26d90 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70  tSpan(Parse*,Exp
26da0 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  rList*,const cha
26db0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
26dc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26dd0 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
26de0 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
26df0 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70  ;.u32 sqlite3Exp
26e00 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74  rListFlags(const
26e10 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
26e20 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
26e30 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
26e40 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
26e50 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
26e60 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
26e70 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
26e80 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
26e90 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
26ea0 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65  en*,int);.#ifnde
26eb0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
26ec0 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c  RTUALTABLE.Modul
26ed0 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67 6d 61  e *sqlite3Pragma
26ee0 56 74 61 62 52 65 67 69 73 74 65 72 28 73 71 6c  VtabRegister(sql
26ef0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
26f00 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66   *zName);.#endif
26f10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
26f20 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
26f30 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
26f40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26f50 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
26f60 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
26f70 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
26f80 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
26f90 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
26fa0 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74  sqlite3CommitInt
26fb0 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c  ernalChanges(sql
26fc0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
26fd0 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e  ite3DeleteColumn
26fe0 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54  Names(sqlite3*,T
26ff0 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
27000 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78  te3ColumnsFromEx
27010 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78  prList(Parse*,Ex
27020 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c  prList*,i16*,Col
27030 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  umn**);.void sql
27040 69 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c  ite3SelectAddCol
27050 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74  umnTypeAndCollat
27060 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
27070 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  *,Select*);.Tabl
27080 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
27090 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
270a0 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69  e*,Select*);.voi
270b0 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
270c0 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
270d0 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73  , int);.Index *s
270e0 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
270f0 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69  Index(Table*);.i
27100 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  16 sqlite3Column
27110 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20  OfIndex(Index*, 
27120 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  i16);.void sqlit
27130 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
27140 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
27150 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
27160 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  t);.#if SQLITE_E
27170 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
27180 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69  UMNS.  void sqli
27190 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74  te3ColumnPropert
271a0 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c  iesFromName(Tabl
271b0 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65  e*, Column*);.#e
271c0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
271d0 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
271e0 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43  tiesFromName(T,C
271f0 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65  ) /* no-op */.#e
27200 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
27210 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
27220 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29  *,Token*,Token*)
27230 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
27240 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
27250 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27260 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
27270 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
27280 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
27290 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
272a0 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
272b0 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
272c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
272d0 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
272e0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73  arse*,Expr*,cons
272f0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
27300 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
27310 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
27320 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
27330 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
27340 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
27350 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
27360 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
27370 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
27380 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
27390 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
273a0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
273b0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
273c0 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
273d0 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
273e0 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
273f0 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
27400 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65  t char*);..#ifde
27410 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
27420 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  BLE.# define sql
27430 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20  ite3FaultSim(X) 
27440 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a  SQLITE_OK.#else.
27450 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75    int sqlite3Fau
27460 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64  ltSim(int);.#end
27470 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  if..Bitvec *sqli
27480 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
27490 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
274a0 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
274b0 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
274c0 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
274d0 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c  NotNull(Bitvec*,
274e0 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
274f0 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
27500 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
27510 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
27520 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
27530 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
27540 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
27550 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
27560 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
27570 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66  ze(Bitvec*);.#if
27580 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
27590 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74  STABLE.int sqlit
275a0 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
275b0 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23  est(int,int*);.#
275c0 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73  endif..RowSet *s
275d0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
275e0 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
275f0 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
27600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
27610 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
27620 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
27630 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
27640 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
27650 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
27660 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42  (RowSet*, int iB
27670 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
27680 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
27690 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
276a0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
276b0 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
276c0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
276d0 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
276e0 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
276f0 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
27700 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
27710 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
27720 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
27730 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
27740 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
27750 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
27760 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
27770 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
27780 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
27790 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
277a0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
277b0 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74  TTACHED>30.  int
277c0 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
277d0 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a  lZero(yDbMask);.
277e0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
277f0 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
27800 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
27810 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
27820 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
27830 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
27840 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
27850 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
27860 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
27870 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65   Table*);.#ifnde
27880 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
27890 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
278a0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
278b0 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
278c0 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
278d0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
278e0 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
278f0 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
27900 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
27910 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
27920 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
27930 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
27940 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
27950 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
27960 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
27970 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
27980 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a   IdList*, int);.
27990 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72  void *sqlite3Arr
279a0 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74  ayAllocate(sqlit
279b0 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  e3*,void*,int,in
279c0 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74  t*,int*);.IdList
279d0 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41   *sqlite3IdListA
279e0 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
279f0 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
27a00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
27a10 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
27a20 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
27a30 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
27a40 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71  rcListEnlarge(sq
27a50 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
27a60 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63  , int, int);.Src
27a70 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
27a80 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
27a90 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  e3*, SrcList*, T
27aa0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
27ab0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
27ac0 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f  SrcListAppendFro
27ad0 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72  mTerm(Parse*, Sr
27ae0 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
27af0 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
27b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f                To
27b20 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  ken*, Select*, E
27b30 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  xpr*, IdList*);.
27b40 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
27b50 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72  istIndexedBy(Par
27b60 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  se *, SrcList *,
27b70 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
27b80 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75  sqlite3SrcListFu
27b90 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53  ncArgs(Parse*, S
27ba0 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
27bb0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
27bc0 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28  IndexedByLookup(
27bd0 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20  Parse *, struct 
27be0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
27bf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
27c00 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
27c10 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  e(SrcList*);.voi
27c20 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
27c30 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61  AssignCursors(Pa
27c40 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
27c50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c  .void sqlite3IdL
27c60 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
27c70 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  3*, IdList*);.vo
27c80 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
27c90 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
27ca0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64  , SrcList*);.Ind
27cb0 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63  ex *sqlite3Alloc
27cc0 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73  ateIndexObject(s
27cd0 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c  qlite3*,i16,int,
27ce0 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
27cf0 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78  lite3CreateIndex
27d00 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
27d10 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  oken*,SrcList*,E
27d20 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b  xprList*,int,Tok
27d30 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
27d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
27d50 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  xpr*, int, int, 
27d60 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
27d70 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65  3DropIndex(Parse
27d80 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
27d90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
27da0 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
27db0 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
27dc0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
27dd0 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72  te3SelectNew(Par
27de0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72  se*,ExprList*,Sr
27df0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
27e00 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  rList*,.        
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a   Expr*,ExprList*
27e30 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ,u32,Expr*);.voi
27e40 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
27e50 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
27e60 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
27e70 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
27e80 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
27e90 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
27ea0 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
27eb0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
27ec0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27ed0 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
27ee0 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
27ef0 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
27f00 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
27f10 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
27f20 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
27f30 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
27f40 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
27f50 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
27f60 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
27f70 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
27f80 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
27f90 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  r*,char*);.#endi
27fa0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  f.void sqlite3De
27fb0 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
27fc0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a   SrcList*, Expr*
27fd0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  , ExprList*, Exp
27fe0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27ff0 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
28000 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
28010 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78  st*,Expr*,int,Ex
28020 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
28030 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74  WhereInfo *sqlit
28040 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72  e3WhereBegin(Par
28050 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
28060 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
28070 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b  rList*,u16,int);
28080 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65  .void sqlite3Whe
28090 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a  reEnd(WhereInfo*
280a0 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
280b0 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
280c0 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
280d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
280e0 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
280f0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
28100 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
28110 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
28120 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
28130 65 4f 72 64 65 72 65 64 49 6e 6e 65 72 4c 6f 6f  eOrderedInnerLoo
28140 70 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  p(WhereInfo*);.i
28150 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
28160 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66  sSorted(WhereInf
28170 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
28180 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
28190 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
281a0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
281b0 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
281c0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
281d0 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
281e0 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  s(WhereInfo*, in
281f0 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45  t*);.#define ONE
28200 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20  PASS_OFF      0 
28210 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66         /* Use of
28220 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c   ONEPASS not all
28230 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
28240 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20  ONEPASS_SINGLE  
28250 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   1        /* ONE
28260 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61  PASS valid for a
28270 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61   single row upda
28280 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  te */.#define ON
28290 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32  EPASS_MULTI    2
282a0 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
282b0 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20  SS is valid for 
282c0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
282d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
282e0 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f  rCodeLoadIndexCo
282f0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64  lumn(Parse*, Ind
28300 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
28310 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28320 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
28330 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
28340 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
28350 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
28360 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
28370 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65 2a 2c  umnToReg(Parse*,
28380 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
28390 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
283a0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
283b0 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
283c0 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
283d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
283e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
283f0 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
28400 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
28410 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
28420 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c  cheStore(Parse*,
28430 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
28440 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28450 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65  rCachePush(Parse
28460 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28470 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72  ExprCachePop(Par
28480 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
28490 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
284a0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
284b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
284c0 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
284d0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
284e0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
284f0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
28500 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
28510 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28520 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
28530 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
28540 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f  qlite3ExprCodeCo
28550 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  py(Parse*, Expr*
28560 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28570 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
28580 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
28590 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
285a0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
285b0 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78  tInit(Parse*, Ex
285c0 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
285d0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
285e0 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
285f0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
28600 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
28610 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
28620 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28630 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
28640 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
28650 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
28660 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
28670 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
28680 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
28690 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
286a0 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
286b0 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
286c0 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
286d0 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
286e0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
286f0 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
28700 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
28710 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65  ant terms */.#de
28720 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
28730 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20 20  _REF      0x04  
28740 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e  /* Use ExprList.
28750 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20  u.x.iOrderByCol 
28760 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
28770 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20  E_ECEL_OMITREF  
28780 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66  0x08  /* Omit if
28790 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f   ExprList.u.x.iO
287a0 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69  rderByCol */.voi
287b0 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54  d sqlite3ExprIfT
287c0 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  rue(Parse*, Expr
287d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
287e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
287f0 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78  False(Parse*, Ex
28800 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
28810 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28820 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73 65  IfFalseDup(Parse
28830 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
28840 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  nt);.Table *sqli
28850 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c  te3FindTable(sql
28860 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
28870 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
28880 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f  .#define LOCATE_
28890 56 49 45 57 20 20 20 20 30 78 30 31 0a 23 64 65  VIEW    0x01.#de
288a0 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52  fine LOCATE_NOER
288b0 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20 2a  R   0x02.Table *
288c0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
288d0 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c  le(Parse*,u32 fl
288e0 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ags,const char*,
288f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
28900 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
28910 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
28920 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73 74  se*,u32 flags,st
28930 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
28940 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
28950 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
28960 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
28970 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
28980 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
28990 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
289a0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
289b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
289c0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
289d0 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
289e0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
289f0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
28a00 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
28a10 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  se*,Token*);.int
28a20 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
28a30 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
28a40 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
28a50 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
28a60 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
28a70 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
28a80 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50  te3ExprCompare(P
28a90 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70  arse*,Expr*, Exp
28aa0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
28ab0 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
28ac0 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72  Skip(Expr*, Expr
28ad0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
28ae0 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70  ite3ExprListComp
28af0 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45  are(ExprList*, E
28b00 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
28b10 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
28b20 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72 73 65  mpliesExpr(Parse
28b30 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  *,Expr*, Expr*, 
28b40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28b50 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
28b60 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
28b70 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
28b80 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
28b90 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
28ba0 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
28bb0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
28bc0 33 45 78 70 72 43 6f 76 65 72 65 64 42 79 49 6e  3ExprCoveredByIn
28bd0 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74 20 69  dex(Expr*, int i
28be0 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49 64 78  Cur, Index *pIdx
28bf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75  );.int sqlite3Fu
28c00 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72  nctionUsesThisSr
28c10 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74  c(Expr*, SrcList
28c20 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65  *);.Vdbe *sqlite
28c30 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29  3GetVdbe(Parse*)
28c40 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
28c50 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
28c60 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
28c70 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
28c80 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
28c90 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
28ca0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
28cb0 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
28cc0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
28cd0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
28ce0 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
28cf0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
28d00 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
28d10 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
28d20 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
28d30 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
28d40 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
28d50 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
28d60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
28d70 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
28d80 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
28d90 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
28da0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
28db0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
28dc0 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
28dd0 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
28de0 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
28df0 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
28e00 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
28e10 20 73 71 6c 69 74 65 33 45 78 70 72 49 64 54 6f   sqlite3ExprIdTo
28e20 54 72 75 65 46 61 6c 73 65 28 45 78 70 72 2a 29  TrueFalse(Expr*)
28e30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28e40 72 54 72 75 74 68 56 61 6c 75 65 28 63 6f 6e 73  rTruthValue(cons
28e50 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t Expr*);.int sq
28e60 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
28e70 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ant(Expr*);.int 
28e80 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
28e90 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70  stantNotJoin(Exp
28ea0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
28eb0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
28ec0 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20  Function(Expr*, 
28ed0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
28ee0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
28ef0 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
28f00 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Expr*, ExprList*
28f10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28f20 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e  prIsTableConstan
28f30 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69  t(Expr*,int);.#i
28f40 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
28f50 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a  LE_CURSOR_HINTS.
28f60 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
28f70 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28  ontainsSubquery(
28f80 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Expr*);.#endif.i
28f90 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
28fa0 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
28fb0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
28fc0 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
28fd0 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74  onst Expr*);.int
28fe0 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
28ff0 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
29000 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
29010 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
29020 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
29030 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
29040 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
29050 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a  lete(.    Parse*
29060 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
29070 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
29080 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a  ,u8,u8,u8,int);.
29090 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
290a0 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
290b0 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
290c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
290d0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
290e0 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
290f0 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
29100 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
29110 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
29120 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29130 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
29140 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
29150 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
29160 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
29170 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
29180 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69  able*,int*,int,i
29190 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  nt,int,int,.    
291a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291c0 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c   u8,u8,int,int*,
291d0 69 6e 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  int*);.#ifdef SQ
291e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c  LITE_ENABLE_NULL
291f0 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c  _TRIM.  void sql
29200 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72  ite3SetMakeRecor
29210 64 50 35 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a  dP5(Vdbe*,Table*
29220 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29230 65 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65  e sqlite3SetMake
29240 52 65 63 6f 72 64 50 35 28 41 2c 42 29 0a 23 65  RecordP5(A,B).#e
29250 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
29260 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69  3CompleteInserti
29270 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  on(Parse*,Table*
29280 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
29290 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  *,int,int,int);.
292a0 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
292b0 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50  ableAndIndices(P
292c0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
292d0 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a  nt, u8, int, u8*
292e0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76  , int*, int*);.v
292f0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
29300 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50  WriteOperation(P
29310 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
29320 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ;.void sqlite3Mu
29330 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29  ltiWrite(Parse*)
29340 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
29350 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a  yAbort(Parse*);.
29360 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74  void sqlite3Halt
29370 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
29380 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61  *, int, int, cha
29390 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69  r*, i8, u8);.voi
293a0 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43  d sqlite3UniqueC
293b0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
293c0 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a  , int, Index*);.
293d0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69  void sqlite3Rowi
293e0 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  dConstraint(Pars
293f0 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29  e*, int, Table*)
29400 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
29410 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  xprDup(sqlite3*,
29420 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  Expr*,int);.Expr
29430 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
29440 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  rListDup(sqlite3
29450 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  *,ExprList*,int)
29460 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
29470 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c  e3SrcListDup(sql
29480 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69  ite3*,SrcList*,i
29490 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  nt);.IdList *sql
294a0 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71  ite3IdListDup(sq
294b0 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b  lite3*,IdList*);
294c0 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
294d0 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65  SelectDup(sqlite
294e0 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b  3*,Select*,int);
294f0 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
29500 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71  _ENABLED.void sq
29510 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61  lite3SelectSetNa
29520 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74  me(Select*,const
29530 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
29540 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
29550 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42  electSetName(A,B
29560 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
29570 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74  lite3InsertBuilt
29580 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a  inFuncs(FuncDef*
29590 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a  ,int);.FuncDef *
295a0 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74  sqlite3FindFunct
295b0 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ion(sqlite3*,con
295c0 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c  st char*,int,u8,
295d0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
295e0 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
295f0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
29600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
29610 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
29620 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
29630 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
29640 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42  erPerConnectionB
29650 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
29660 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
29670 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
29680 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
29690 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
296a0 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
296b0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
296c0 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
296d0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
296e0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
296f0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
29700 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
29710 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
29720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
29730 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
29740 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
29750 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78  r*, ExprList*,Ex
29760 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  pr*,int);.#endif
29770 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
29780 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
29790 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
297a0 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
297b0 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
297c0 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
297d0 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
297e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297f0 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
29800 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
29810 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
29820 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
29830 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
29840 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
29850 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
29860 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
29870 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29880 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
29890 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
298a0 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
298b0 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
298c0 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
298d0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
298e0 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
298f0 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
29900 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
29910 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
29920 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
29930 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
29940 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
29950 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
29960 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
29970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29980 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
29990 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
299a0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
299b0 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
299c0 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
299d0 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
299e0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
299f0 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
29a00 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
29a10 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
29a20 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
29a30 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
29a40 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
29a50 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
29a60 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
29a70 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
29a80 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
29a90 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a  lite3*,Select*,.
29aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ac0 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
29ad0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
29ae0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
29af0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
29b00 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65  nsertStep(sqlite
29b10 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  3*,Token*, IdLis
29b20 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
29b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b40 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65              Sele
29b50 63 74 2a 2c 75 38 2c 63 6f 6e 73 74 20 63 68 61  ct*,u8,const cha
29b60 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
29b70 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
29b80 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
29b90 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  dateStep(sqlite3
29ba0 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
29bb0 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20  t*, Expr*, u8,. 
29bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29be0 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
29bf0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
29c00 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
29c10 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
29c20 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
29c30 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c  *,Token*, Expr*,
29c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c60 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
29c70 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
29c80 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29c90 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
29ca0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
29cb0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
29cc0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
29cd0 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
29ce0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
29cf0 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
29d00 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
29d10 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
29d20 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
29d30 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
29d40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
29d50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
29d60 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
29d70 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
29d80 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65   : (p)).# define
29d90 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
29da0 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
29db0 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a  level==0).#else.
29dc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29dd0 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c  TriggersExist(B,
29de0 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66  C,D,E,F) 0.# def
29df0 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74  ine sqlite3Delet
29e00 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20  eTrigger(A,B).# 
29e10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72  define sqlite3Dr
29e20 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42  opTriggerPtr(A,B
29e30 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29e40 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
29e50 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a  eTrigger(A,B,C).
29e60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29e70 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41  CodeRowTrigger(A
29e80 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49  ,B,C,D,E,F,G,H,I
29e90 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29ea0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
29eb0 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45  Direct(A,B,C,D,E
29ec0 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,F).# define sql
29ed0 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
29ee0 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65  X, Y) 0.# define
29ef0 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
29f00 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66  level(p) p.# def
29f10 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
29f20 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66  level(p) 1.# def
29f30 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
29f40 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c  erColmask(A,B,C,
29f50 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69  D,E,F,G) 0.#endi
29f60 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
29f70 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  inType(Parse*, T
29f80 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
29f90 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
29fa0 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67  ite3CreateForeig
29fb0 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  nKey(Parse*, Exp
29fc0 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
29fd0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
29fe0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
29ff0 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  erForeignKey(Par
2a000 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64  se*, int);.#ifnd
2a010 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2a020 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76  UTHORIZATION.  v
2a030 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52  oid sqlite3AuthR
2a040 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ead(Parse*,Expr*
2a050 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74  ,Schema*,SrcList
2a060 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2a070 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65  3AuthCheck(Parse
2a080 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
2a090 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
2a0a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
2a0b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
2a0c0 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72  hContextPush(Par
2a0d0 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74  se*, AuthContext
2a0e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2a0f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
2a100 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75  uthContextPop(Au
2a110 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69  thContext*);.  i
2a120 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  nt sqlite3AuthRe
2a130 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f  adCol(Parse*, co
2a140 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
2a150 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
2a160 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2a170 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61  qlite3AuthRead(a
2a180 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65  ,b,c,d).# define
2a190 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
2a1a0 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20  k(a,b,c,d,e)    
2a1b0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69  SQLITE_OK.# defi
2a1c0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
2a1d0 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29  ntextPush(a,b,c)
2a1e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2a1f0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
2a200 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a  a)  ((void)(a)).
2a210 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2a220 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a  te3Attach(Parse*
2a230 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
2a240 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2a250 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65  ite3Detach(Parse
2a260 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2a270 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
2a280 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
2a290 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2a2a0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
2a2b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2a2c0 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
2a2d0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
2a2e0 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
2a2f0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
2a300 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
2a310 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
2a320 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
2a330 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
2a340 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
2a350 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2a360 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
2a370 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
2a380 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
2a390 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
2a3a0 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
2a3b0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
2a3c0 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
2a3d0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
2a3e0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2a3f0 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
2a400 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2a410 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e  TE_OMIT_UTF16.in
2a420 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
2a430 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
2a440 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
2a450 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ar);.#endif.int 
2a460 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
2a470 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
2a480 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
2a490 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
2a4a0 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
2a4b0 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
2a4c0 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f  3LogEst(u64);.Lo
2a4d0 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2a4e0 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67  stAdd(LogEst,Log
2a4f0 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Est);.#ifndef SQ
2a500 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2a510 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71  LTABLE.LogEst sq
2a520 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44  lite3LogEstFromD
2a530 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23  ouble(double);.#
2a540 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2a550 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2a560 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29  STMT_SCANSTATUS)
2a570 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
2a580 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2a590 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20  STAT3_OR_STAT4) 
2a5a0 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
2a5b0 28 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f  (SQLITE_EXPLAIN_
2a5c0 45 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a  ESTIMATED_ROWS).
2a5d0 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  u64 sqlite3LogEs
2a5e0 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a  tToInt(LogEst);.
2a5f0 23 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71  #endif.VList *sq
2a600 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28 73 71  lite3VListAdd(sq
2a610 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f  lite3*,VList*,co
2a620 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e  nst char*,int,in
2a630 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t);.const char *
2a640 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54  sqlite3VListNumT
2a650 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74  oName(VList*,int
2a660 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c  );.int sqlite3VL
2a670 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69  istNameToNum(VLi
2a680 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  st*,const char*,
2a690 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  int);../*.** Rou
2a6a0 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e  tines to read an
2a6b0 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65  d write variable
2a6c0 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
2a6d0 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  .  These used to
2a6e0 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c  .** be defined l
2a6f0 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20  ocally, but now 
2a700 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e  we use the varin
2a710 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68  t routines in th
2a720 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65  e util.c.** file
2a730 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2a740 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
2a750 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  ed char*, u64);.
2a760 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
2a770 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
2a780 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
2a790 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
2a7a0 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
2a7b0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
2a7c0 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
2a7d0 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
2a7e0 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
2a7f0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66  common case is f
2a800 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62  or a varint to b
2a810 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  e a single byte.
2a820 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67    They following
2a830 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c  .** macros handl
2a840 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
2a850 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63  e without a proc
2a860 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20  edure call, but 
2a870 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  then call.** the
2a880 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c   procedure for l
2a890 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a  arger varints..*
2a8a0 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
2a8b0 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
2a8c0 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
2a8d0 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
2a8e0 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
2a8f0 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
2a900 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
2a910 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
2a920 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2a930 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
2a940 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
2a950 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
2a960 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
2a970 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23  rint((A),(B))).#
2a980 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
2a990 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
2a9a0 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
2a9b0 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
2a9c0 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
2a9d0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2a9e0 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
2a9f0 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
2aa00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2aa10 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64  TableAffinity(Vd
2aa20 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
2aa30 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43  );.char sqlite3C
2aa40 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45  ompareAffinity(E
2aa50 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
2aa60 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69   aff2);.int sqli
2aa70 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
2aa80 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  Ok(Expr *pExpr, 
2aa90 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74  char idx_affinit
2aaa0 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  y);.char sqlite3
2aab0 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e  TableColumnAffin
2aac0 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  ity(Table*,int);
2aad0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
2aae0 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
2aaf0 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
2ab00 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
2ab10 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
2ab20 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2ab30 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
2ab40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
2ab50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ab60 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c  ErrorWithMsg(sql
2ab70 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2ab80 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
2ab90 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
2aba0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2abb0 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65  oid sqlite3Syste
2abc0 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  mError(sqlite3*,
2abd0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
2abe0 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c  te3HexToBlob(sql
2abf0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
2ac00 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38  r *z, int n);.u8
2ac10 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74   sqlite3HexToInt
2ac20 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c  (int h);.int sql
2ac30 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
2ac40 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
2ac50 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
2ac60 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e   **);..#if defin
2ac70 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ed(SQLITE_NEED_E
2ac80 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63  RR_NAME).const c
2ac90 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e  har *sqlite3ErrN
2aca0 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ame(int);.#endif
2acb0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2acc0 45 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49  ENABLE_DESERIALI
2acd0 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  ZE.int sqlite3Me
2ace0 6d 64 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23  mdbInit(void);.#
2acf0 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61  endif..const cha
2ad00 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
2ad10 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
2ad20 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
2ad30 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
2ad40 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
2ad50 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
2ad60 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
2ad70 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c  char*,int);.Coll
2ad80 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
2ad90 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
2ada0 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
2adb0 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
2adc0 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
2add0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2ade0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
2adf0 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  pr);.CollSeq *sq
2ae00 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53  lite3ExprNNCollS
2ae10 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2ae20 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
2ae30 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2ae40 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72 73  ollSeqMatch(Pars
2ae50 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  e*,Expr*,Expr*);
2ae60 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2ae70 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
2ae80 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
2ae90 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
2aea0 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  ken*, int);.Expr
2aeb0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
2aec0 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
2aed0 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
2aee0 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
2aef0 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
2af00 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
2af10 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
2af20 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
2af30 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
2af40 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
2af50 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
2af60 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
2af70 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
2af80 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
2af90 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
2afa0 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
2afb0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2afc0 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
2afd0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
2afe0 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
2aff0 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
2b000 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
2b010 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2b020 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
2b030 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
2b040 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
2b050 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
2b060 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2b070 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
2b080 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
2b090 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
2b0a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38  const char *z,u8
2b0b0 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
2b0c0 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
2b0d0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2b0e0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2b0f0 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
2b100 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
2b110 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2b120 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
2b130 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
2b140 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20  nst void *,u8,. 
2b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b160 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
2b170 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
2b180 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c  ite3ValueSetNull
2b190 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2b1a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2b1b0 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
2b1c0 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
2b1d0 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
2b1e0 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
2b1f0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2b200 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 68  TE_OMIT_UTF16.ch
2b210 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36  ar *sqlite3Utf16
2b220 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  to8(sqlite3 *, c
2b230 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
2b240 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74   u8);.#endif.int
2b250 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
2b260 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
2b270 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
2b280 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2b290 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b2a0 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2b2b0 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
2b2c0 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
2b2d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
2b2e0 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
2b2f0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2b300 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
2b310 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
2b320 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20 73  ern const char s
2b330 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59 5b  qlite3StrBINARY[
2b340 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
2b350 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2b360 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
2b370 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  r[];.extern cons
2b380 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2b390 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
2b3a0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
2b3b0 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74  Token sqlite3Int
2b3c0 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e  Tokens[];.extern
2b3d0 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
2b3e0 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
2b3f0 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
2b400 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48 61  extern FuncDefHa
2b410 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  sh sqlite3Builti
2b420 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  nFunctions;.#ifn
2b430 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b440 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
2b450 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
2b460 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
2b470 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
2b480 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c 69  FILE.extern sqli
2b490 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c 69 74  te3_uint64 sqlit
2b4a0 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a 23  e3NProfileCnt;.#
2b4b0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2b4c0 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2b4d0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2b4e0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2b4f0 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61  qlite3Reindex(Pa
2b500 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2b510 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2b520 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e  te3AlterFunction
2b530 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
2b540 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
2b550 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2b560 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  cList*, Token*);
2b570 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
2b580 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67  oken(const unsig
2b590 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20  ned char *, int 
2b5a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b5b0 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73  NestedParse(Pars
2b5c0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2b5d0 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
2b5e0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
2b5f0 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69  dStatements(sqli
2b600 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2b610 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28  e3CodeSubselect(
2b620 50 61 72 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20  Parse*, Expr *, 
2b630 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2b640 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
2b650 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
2b660 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
2b670 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2b680 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d  lectWrongNumTerm
2b690 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50  sError(Parse *pP
2b6a0 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29  arse, Select *p)
2b6b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
2b6c0 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
2b6d0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2b6e0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2b6f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2b700 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2b710 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
2b720 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
2b730 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
2b740 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65  olveExprListName
2b750 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
2b760 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  ExprList*);.void
2b770 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
2b780 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65  electNames(Parse
2b790 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
2b7a0 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
2b7b0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
2b7c0 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73  lfReference(Pars
2b7d0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78  e*,Table*,int,Ex
2b7e0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  pr*,ExprList*);.
2b7f0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2b800 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
2b810 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2b820 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
2b830 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2b840 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
2b850 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
2b860 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
2b870 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2b880 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
2b890 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
2b8a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2b8b0 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
2b8c0 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
2b8d0 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  ist *);.CollSeq 
2b8e0 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
2b8f0 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
2b900 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
2b910 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
2b920 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
2b930 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38  (const char*, u8
2b940 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b950 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
2b960 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2b970 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
2b980 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
2b990 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74  syHandler*);.int
2b9a0 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
2b9b0 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
2b9c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
2b9d0 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
2b9e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2b9f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
2ba00 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
2ba10 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
2ba20 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
2ba30 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
2ba40 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
2ba50 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
2ba60 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
2ba70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2ba80 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
2ba90 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
2baa0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2bab0 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
2bac0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
2bad0 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
2bae0 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
2baf0 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
2bb00 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
2bb10 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
2bb20 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
2bb30 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
2bb40 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
2bb50 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
2bb60 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2bb70 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
2bb80 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
2bb90 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
2bba0 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
2bbb0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2bbc0 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
2bbd0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2bbe0 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
2bbf0 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
2bc00 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2bc10 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
2bc20 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65  e3KeyInfoIsWrite
2bc30 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  able(KeyInfo*);.
2bc40 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2bc50 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
2bc60 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
2bc70 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
2bc80 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28  void *,.  void (
2bc90 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2bca0 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
2bcb0 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
2bcc0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2bcd0 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2bce0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f  e3_value **), vo
2bcf0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2bd00 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63  ontext*),.  Func
2bd10 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
2bd20 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20  tructor.);.void 
2bd30 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28  sqlite3OomFault(
2bd40 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2bd50 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28  sqlite3OomClear(
2bd60 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2bd70 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71  qlite3ApiExit(sq
2bd80 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b  lite3 *db, int);
2bd90 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
2bda0 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72  TempDatabase(Par
2bdb0 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  se *);..void sql
2bdc0 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
2bdd0 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69  (StrAccum*, sqli
2bde0 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74  te3*, char*, int
2bdf0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2be00 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
2be10 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  nd(StrAccum*,con
2be20 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76  st char*,int);.v
2be30 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2be40 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72  cumAppendAll(Str
2be50 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
2be60 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2be70 33 41 70 70 65 6e 64 43 68 61 72 28 53 74 72 41  3AppendChar(StrA
2be80 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b  ccum*,int,char);
2be90 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74  .char *sqlite3St
2bea0 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72  rAccumFinish(Str
2beb0 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
2bec0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73  lite3StrAccumRes
2bed0 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  et(StrAccum*);.v
2bee0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2bef0 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74  tDestInit(Select
2bf00 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  Dest*,int,int);.
2bf10 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65  Expr *sqlite3Cre
2bf20 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71  ateColumnExpr(sq
2bf30 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74  lite3 *, SrcList
2bf40 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a   *, int, int);..
2bf50 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
2bf60 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65  upRestart(sqlite
2bf70 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69  3_backup *);.voi
2bf80 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55  d sqlite3BackupU
2bf90 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61  pdate(sqlite3_ba
2bfa0 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f  ckup *, Pgno, co
2bfb0 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e  nst u8 *);..#ifn
2bfc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bfd0 53 55 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c  SUBQUERY.int sql
2bfe0 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28  ite3ExprCheckIN(
2bff0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2c000 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2c010 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49  qlite3ExprCheckI
2c020 4e 28 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b  N(x,y) SQLITE_OK
2c030 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2c040 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2c050 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69  AT3_OR_STAT4.voi
2c060 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
2c070 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
2c080 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
2c090 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a  4ProbeSetValue(.
2c0a0 20 20 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78      Parse*,Index
2c0b0 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  *,UnpackedRecord
2c0c0 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74  **,Expr*,int,int
2c0d0 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
2c0e0 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f  te3Stat4ValueFro
2c0f0 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78  mExpr(Parse*, Ex
2c100 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33  pr*, u8, sqlite3
2c110 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20  _value**);.void 
2c120 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
2c130 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
2c140 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  cord*);.int sqli
2c150 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73  te3Stat4Column(s
2c160 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76  qlite3*, const v
2c170 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  oid*, int, int, 
2c180 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2c190 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e  ;.char sqlite3In
2c1a0 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  dexColumnAffinit
2c1b0 79 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65  y(sqlite3*, Inde
2c1c0 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  x*, int);.#endif
2c1d0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
2c1e0 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d  rface to the LEM
2c1f0 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72  ON-generated par
2c200 73 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ser.*/.#ifndef S
2c210 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
2c220 4f 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  ON.  void *sqlit
2c230 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f  e3ParserAlloc(vo
2c240 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 20 20  id*(*)(u64));.  
2c250 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2c260 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
2c270 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23  id(*)(void*));.#
2c280 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2c290 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20  e3Parser(void*, 
2c2a0 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73  int, Token, Pars
2c2b0 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52  e*);.#ifdef YYTR
2c2c0 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48  ACKMAXSTACKDEPTH
2c2d0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61  .  int sqlite3Pa
2c2e0 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f  rserStackPeak(vo
2c2f0 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f  id*);.#endif..vo
2c300 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f  id sqlite3AutoLo
2c310 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  adExtensions(sql
2c320 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20  ite3*);.#ifndef 
2c330 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
2c340 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69  _EXTENSION.  voi
2c350 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  d sqlite3CloseEx
2c360 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
2c370 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2c380 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  ne sqlite3CloseE
2c390 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e  xtensions(X).#en
2c3a0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
2c3b0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2c3c0 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c  CACHE.  void sql
2c3d0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61  ite3TableLock(Pa
2c3e0 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  rse *, int, int,
2c3f0 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   u8, const char 
2c400 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
2c410 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ine sqlite3Table
2c420 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a  Lock(v,w,x,y,z).
2c430 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2c440 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74  QLITE_TEST.  int
2c450 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28   sqlite3Utf8To8(
2c460 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b  unsigned char*);
2c470 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2c480 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2c490 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
2c4a0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  ne sqlite3VtabCl
2c4b0 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65  ear(Y).#  define
2c4c0 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
2c4d0 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  (X,Y) SQLITE_OK.
2c4e0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2c4f0 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29  3VtabRollback(X)
2c500 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2c510 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a  e3VtabCommit(X).
2c520 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2c530 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
2c540 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  0.#  define sqli
2c550 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23  te3VtabLock(X).#
2c560 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2c570 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20  VtabUnlock(X).# 
2c580 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2c590 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29  tabUnlockList(X)
2c5a0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2c5b0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
2c5c0 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f  X, Y, Z) SQLITE_
2c5d0 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
2c5e0 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c  ite3GetVTable(X,
2c5f0 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29  Y)  ((VTable*)0)
2c600 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73  .#else.   void s
2c610 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
2c620 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
2c630 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  le*);.   void sq
2c640 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e  lite3VtabDisconn
2c650 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ect(sqlite3 *db,
2c660 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69   Table *p);.   i
2c670 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  nt sqlite3VtabSy
2c680 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  nc(sqlite3 *db, 
2c690 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73  Vdbe*);.   int s
2c6a0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
2c6b0 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ck(sqlite3 *db);
2c6c0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2c6d0 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65  tabCommit(sqlite
2c6e0 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20  3 *db);.   void 
2c6f0 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
2c700 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
2c710 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
2c720 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  lock(VTable *);.
2c730 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2c740 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71  tabUnlockList(sq
2c750 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20  lite3*);.   int 
2c760 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
2c770 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  oint(sqlite3 *, 
2c780 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f  int, int);.   vo
2c790 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  id sqlite3VtabIm
2c7a0 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a  portErrmsg(Vdbe*
2c7b0 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29  , sqlite3_vtab*)
2c7c0 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c  ;.   VTable *sql
2c7d0 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71  ite3GetVTable(sq
2c7e0 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
2c7f0 0a 20 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69  .   Module *sqli
2c800 74 65 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64  te3VtabCreateMod
2c810 75 6c 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65  ule(.     sqlite
2c820 33 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63  3*,.     const c
2c830 68 61 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74  har*,.     const
2c840 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a   sqlite3_module*
2c850 2c 0a 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20  ,.     void*,.  
2c860 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a     void(*)(void*
2c870 29 0a 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e  ).   );.#  defin
2c880 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
2c890 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e  ync(db) ((db)->n
2c8a0 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29  VTrans>0 && (db)
2c8b0 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65  ->aVTrans==0).#e
2c8c0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2c8d0 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
2c8e0 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f  leInit(Parse*,Mo
2c8f0 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dule*);.void sql
2c900 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
2c910 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69  sTableClear(sqli
2c920 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  te3*,Module*);.v
2c930 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
2c940 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73  akeWritable(Pars
2c950 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  e*,Table*);.void
2c960 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
2c970 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  nParse(Parse*, T
2c980 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
2c990 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
2c9a0 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e  d sqlite3VtabFin
2c9b0 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ishParse(Parse*,
2c9c0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2c9d0 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69  qlite3VtabArgIni
2c9e0 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
2c9f0 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78  sqlite3VtabArgEx
2ca00 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b  tend(Parse*, Tok
2ca10 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2ca20 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
2ca30 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
2ca40 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61  onst char *, cha
2ca50 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  r **);.int sqlit
2ca60 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63  e3VtabCallConnec
2ca70 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  t(Parse*, Table*
2ca80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2ca90 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71  abCallDestroy(sq
2caa0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2cab0 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
2cac0 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2cad0 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62  (sqlite3 *, VTab
2cae0 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  le *);.FuncDef *
2caf0 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c  sqlite3VtabOverl
2cb00 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  oadFunction(sqli
2cb10 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20  te3 *,FuncDef*, 
2cb20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29  int nArg, Expr*)
2cb30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
2cb40 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71  validFunction(sq
2cb50 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
2cb60 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
2cb70 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74  **);.sqlite3_int
2cb80 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75  64 sqlite3StmtCu
2cb90 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65  rrentTime(sqlite
2cba0 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  3_context*);.int
2cbb0 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61   sqlite3VdbePara
2cbc0 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a  meterIndex(Vdbe*
2cbd0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  , const char*, i
2cbe0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2cbf0 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
2cc00 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c  (sqlite3_stmt *,
2cc10 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29   sqlite3_stmt *)
2cc20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
2cc30 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a  rserReset(Parse*
2cc40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2cc50 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a  prepare(Vdbe*);.
2cc60 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2cc70 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28  ListCheckLength(
2cc80 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2cc90 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2cca0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2ccb0 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f  3BinaryCompareCo
2ccc0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45  llSeq(Parse *, E
2ccd0 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a  xpr *, Expr *);.
2cce0 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49  int sqlite3TempI
2ccf0 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71  nMemory(const sq
2cd00 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63  lite3*);.const c
2cd10 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
2cd20 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29  nalModename(int)
2cd30 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2cd40 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
2cd50 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
2cd60 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  t(sqlite3*, int,
2cd70 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   int, int*, int*
2cd80 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2cd90 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76  WalDefaultHook(v
2cda0 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
2cdb0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2cdc0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
2cdd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20  QLITE_OMIT_CTE. 
2cde0 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69   With *sqlite3Wi
2cdf0 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74  thAdd(Parse*,Wit
2ce00 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  h*,Token*,ExprLi
2ce10 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  st*,Select*);.  
2ce20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
2ce30 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
2ce40 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73  With*);.  void s
2ce50 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 50  qlite3WithPush(P
2ce60 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38  arse*, With*, u8
2ce70 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  );.#else.#define
2ce80 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
2ce90 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20  (x,y,z).#define 
2cea0 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
2ceb0 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f  e(x,y).#endif../
2cec0 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
2ced0 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  or functions in 
2cee0 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74  fkey.c. All of t
2cef0 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65  hese are replace
2cf00 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61  d by.** no-op ma
2cf10 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52  cros if OMIT_FOR
2cf20 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69  EIGN_KEY is defi
2cf30 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ned. In this cas
2cf40 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20  e no foreign.** 
2cf50 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  key functionalit
2cf60 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
2cf70 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  If OMIT_TRIGGER 
2cf80 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a  is defined but.*
2cf90 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  * OMIT_FOREIGN_K
2cfa0 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20  EY is not, only 
2cfb0 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  some of the func
2cfc0 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65  tions are no-ope
2cfd0 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61  d. In.** this ca
2cfe0 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  se foreign keys 
2cff0 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20  are parsed, but 
2d000 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f  no other functio
2d010 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f  nality is.** pro
2d020 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65  vided (enforceme
2d030 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61  nt of FK constra
2d040 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68  ints requires th
2d050 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73  e triggers sub-s
2d060 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21  ystem)..*/.#if !
2d070 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2d080 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
2d090 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2d0a0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2d0b0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
2d0c0 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20  FkCheck(Parse*, 
2d0d0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2d0e0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
2d0f0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72  void sqlite3FkDr
2d100 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
2d110 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65  SrcList *, Table
2d120 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2d130 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73  e3FkActions(Pars
2d140 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
2d150 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a  List*, int, int*
2d160 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
2d170 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
2d180 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2d190 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33  int*, int);.  u3
2d1a0 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  2 sqlite3FkOldma
2d1b0 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  sk(Parse*, Table
2d1c0 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69  *);.  FKey *sqli
2d1d0 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
2d1e0 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a  Table *);.#else.
2d1f0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2d200 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63  3FkActions(a,b,c
2d210 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
2d220 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  e sqlite3FkCheck
2d230 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
2d240 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2d250 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63  kDropTable(a,b,c
2d260 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2d270 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62  te3FkOldmask(a,b
2d280 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64  )         0.  #d
2d290 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
2d2a0 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29  equired(a,b,c,d)
2d2b0 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
2d2c0 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
2d2d0 63 65 73 28 61 29 20 20 20 20 20 20 20 20 30 0a  ces(a)        0.
2d2e0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
2d2f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2d300 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71  GN_KEY.  void sq
2d310 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71  lite3FkDelete(sq
2d320 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29  lite3 *, Table*)
2d330 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
2d340 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72  kLocateIndex(Par
2d350 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a  se*,Table*,FKey*
2d360 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b  ,Index**,int**);
2d370 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2d380 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
2d390 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20  (a,b).  #define 
2d3a0 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
2d3b0 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a  ndex(a,b,c,d,e).
2d3c0 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
2d3d0 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
2d3e0 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
2d3f0 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
2d400 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
2d410 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2d420 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
2d430 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
2d440 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
2d450 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
2d460 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
2d470 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
2d480 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
2d490 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
2d4a0 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
2d4b0 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
2d4c0 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
2d4d0 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
2d4e0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a  ITE_UNTESTABLE.*
2d4f0 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64  * is not defined
2d500 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
2d510 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
2d520 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
2d530 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  inBenignMalloc(v
2d540 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  oid);.  void sql
2d550 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
2d560 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  loc(void);.#else
2d570 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2d580 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
2d590 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20  loc().  #define 
2d5a0 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
2d5b0 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a  Malloc().#endif.
2d5c0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72  ./*.** Allowed r
2d5d0 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
2d5e0 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  m sqlite3FindInI
2d5f0 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  ndex().*/.#defin
2d600 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44  e IN_INDEX_ROWID
2d610 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53          1   /* S
2d620 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64 20  earch the rowid 
2d630 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
2d640 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2d650 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32 20  _EPH          2 
2d660 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65    /* Search an e
2d670 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20  phemeral b-tree 
2d680 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2d690 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20  DEX_INDEX_ASC   
2d6a0 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67   3   /* Existing
2d6b0 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47   index ASCENDING
2d6c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2d6d0 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20  NDEX_INDEX_DESC 
2d6e0 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    4   /* Existin
2d6f0 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49  g index DESCENDI
2d700 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  NG */.#define IN
2d710 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20  _INDEX_NOOP     
2d720 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61      5   /* No ta
2d730 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55  ble available. U
2d740 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a  se comparisons *
2d750 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  /./*.** Allowed 
2d760 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33 72  flags for the 3r
2d770 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
2d780 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2d790 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  x()..*/.#define 
2d7a0 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b  IN_INDEX_NOOP_OK
2d7b0 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
2d7c0 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f  OK to return IN_
2d7d0 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64  INDEX_NOOP */.#d
2d7e0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d  efine IN_INDEX_M
2d7f0 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30 30  EMBERSHIP  0x000
2d800 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  2  /* IN operato
2d810 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65  r used for membe
2d820 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64  rship test */.#d
2d830 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c  efine IN_INDEX_L
2d840 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30 30  OOP        0x000
2d850 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  4  /* IN operato
2d860 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70  r used as a loop
2d870 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46   */.int sqlite3F
2d880 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65  indInIndex(Parse
2d890 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c   *, Expr *, u32,
2d8a0 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69   int*, int*);..i
2d8b0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2d8c0 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66  lOpen(sqlite3_vf
2d8d0 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  s *, const char 
2d8e0 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  *, sqlite3_file 
2d8f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
2d900 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2d910 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73  Size(sqlite3_vfs
2d920 20 2a 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64   *);.#if defined
2d930 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41  (SQLITE_ENABLE_A
2d940 54 4f 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a 20  TOMIC_WRITE) \. 
2d950 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2d960 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41  E_ENABLE_BATCH_A
2d970 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a 20 20 69  TOMIC_WRITE).  i
2d980 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2d990 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f  lCreate(sqlite3_
2d9a0 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  file *);.#endif.
2d9b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
2d9c0 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71  nalIsInMemory(sq
2d9d0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a  lite3_file *p);.
2d9e0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a  void sqlite3MemJ
2d9f0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2da00 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69  e3_file *);..voi
2da10 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  d sqlite3ExprSet
2da20 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50  HeightAndFlags(P
2da30 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2da40 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49  pr *p);.#if SQLI
2da50 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
2da60 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  H>0.  int sqlite
2da70 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
2da80 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69  t(Select *);.  i
2da90 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  nt sqlite3ExprCh
2daa0 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a  eckHeight(Parse*
2dab0 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  , int);.#else.  
2dac0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
2dad0 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2dae0 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73  x) 0.  #define s
2daf0 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
2db00 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69  eight(x,y).#endi
2db10 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65  f..u32 sqlite3Ge
2db20 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a  t4byte(const u8*
2db30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2db40 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32  ut4byte(u8*, u32
2db50 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
2db60 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
2db70 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71  NOTIFY.  void sq
2db80 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
2db90 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
2dba0 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20  , sqlite3 *);.  
2dbb0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2dbc0 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73  ectionUnlocked(s
2dbd0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76  qlite3 *db);.  v
2dbe0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2dbf0 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69  ctionClosed(sqli
2dc00 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a  te3 *db);.#else.
2dc10 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2dc20 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
2dc30 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ed(x,y).  #defin
2dc40 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
2dc50 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20  ionUnlocked(x). 
2dc60 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2dc70 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
2dc80 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  (x).#endif..#ifd
2dc90 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2dca0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61    void sqlite3Pa
2dcb0 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c  rserTrace(FILE*,
2dcc0 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66   char *);.#endif
2dcd0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 59 59 43  .#if defined(YYC
2dce0 4f 56 45 52 41 47 45 29 0a 20 20 69 6e 74 20 73  OVERAGE).  int s
2dcf0 71 6c 69 74 65 33 50 61 72 73 65 72 43 6f 76 65  qlite3ParserCove
2dd00 72 61 67 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e  rage(FILE*);.#en
2dd10 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
2dd20 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
2dd30 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
2dd40 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
2dd50 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
2dd60 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
2dd70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
2dd80 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
2dd90 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
2dda0 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
2ddb0 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  sages..*/.#ifdef
2ddc0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
2ddd0 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20  OTRACE.# define 
2dde0 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20  IOTRACE(A)  if( 
2ddf0 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29  sqlite3IoTrace )
2de00 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  { sqlite3IoTrace
2de10 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c   A; }.  void sql
2de20 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
2de30 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54  ql(Vdbe*);.SQLIT
2de40 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54  E_API SQLITE_EXT
2de50 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45  ERN void (SQLITE
2de60 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49  _CDECL *sqlite3I
2de70 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68  oTrace)(const ch
2de80 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a  ar*,...);.#else.
2de90 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
2dea0 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (A).# define sql
2deb0 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
2dec0 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ql(X).#endif../*
2ded0 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e  .** These routin
2dee0 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  es are available
2def0 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20   for the mem2.c 
2df00 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79  debugging memory
2df10 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e   allocator.** on
2df20 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73  ly.  They are us
2df30 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ed to verify tha
2df40 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70  t different "typ
2df50 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  es" of memory.**
2df60 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
2df70 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65   properly tracke
2df80 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e  d by the system.
2df90 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
2dfa0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20  mdebugSetType() 
2dfb0 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20  sets the "type" 
2dfc0 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  of an allocation
2dfd0 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68   to one of.** th
2dfe0 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72  e MEMTYPE_* macr
2dff0 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  os defined below
2e000 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74  .  The type must
2e010 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69   be a bitmask wi
2e020 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62  th.** a single b
2e030 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71  it set..**.** sq
2e040 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2e050 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
2e060 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68  rue if any of th
2e070 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
2e080 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
2e090 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
2e0a0 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
2e0b0 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
2e0c0 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
2e0d0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2e0e0 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74  HasType() is int
2e0f0 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
2e100 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74  side assert() st
2e110 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
2e120 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2e130 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  oType() returns 
2e140 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20  true if none of 
2e150 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
2e160 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
2e170 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
2e180 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
2e190 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
2e1a0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
2e1b0 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68  **.** Perhaps th
2e1c0 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74  e most important
2e1d0 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69   point is the di
2e1e0 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
2e1f0 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a   MEMTYPE_HEAP.**
2e200 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f   and MEMTYPE_LOO
2e210 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61  KASIDE.  If an a
2e220 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d  llocation is MEM
2e230 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  TYPE_LOOKASIDE, 
2e240 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74  that means.** it
2e250 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
2e260 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f   allocated by lo
2e270 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20  okaside, except 
2e280 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77  the allocation w
2e290 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20  as.** too large 
2e2a0 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73  or lookaside was
2e2b0 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20   already full.  
2e2c0 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
2e2d0 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61  to verify.** tha
2e2e0 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68  t allocations th
2e2f0 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
2e300 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20  en satisfied by 
2e310 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f  lookaside are no
2e320 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b  t.** passed back
2e330 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64   to non-lookasid
2e340 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
2e350 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68  s.  Asserts such
2e360 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70   as the.** examp
2e370 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61  le above are pla
2e380 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c  ced on the non-l
2e390 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
2e3a0 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69  routines to veri
2e3b0 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74  fy.** this const
2e3c0 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  raint..**.** All
2e3d0 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f   of this is no-o
2e3e0 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69  p for a producti
2e3f0 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e  on build.  It on
2e400 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a  ly comes into.**
2e410 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53   play when the S
2e420 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63  QLITE_MEMDEBUG c
2e430 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
2e440 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23  on is used..*/.#
2e450 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
2e460 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
2e470 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2e480 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
2e490 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
2e4a0 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64  ebugHasType(void
2e4b0 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
2e4c0 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
2e4d0 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65  pe(void*,u8);.#e
2e4e0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2e4f0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2e500 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d  ype(X,Y)  /* no-
2e510 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73  op */.# define s
2e520 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2e530 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20  sType(X,Y)  1.# 
2e540 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
2e550 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59  mdebugNoType(X,Y
2e560 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65  )   1.#endif.#de
2e570 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41  fine MEMTYPE_HEA
2e580 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  P       0x01  /*
2e590 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c   General heap al
2e5a0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
2e5b0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  fine MEMTYPE_LOO
2e5c0 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a  KASIDE  0x02  /*
2e5d0 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74   Heap that might
2e5e0 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
2e5f0 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  side */.#define 
2e600 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
2e610 20 20 20 30 78 30 34 20 20 2f 2a 20 50 61 67 65     0x04  /* Page
2e620 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
2e630 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  ns */../*.** Thr
2e640 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
2e650 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
2e660 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
2e670 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
2e680 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
2e690 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
2e6a0 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
2e6b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
2e6c0 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
2e6d0 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
2e6e0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
2e6f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2e700 4c 45 5f 44 42 50 41 47 45 5f 56 54 41 42 29 20  LE_DBPAGE_VTAB) 
2e710 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2e720 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
2e730 74 65 33 44 62 70 61 67 65 52 65 67 69 73 74 65  te3DbpageRegiste
2e740 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
2e750 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2e760 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42  SQLITE_ENABLE_DB
2e770 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65  STAT_VTAB) || de
2e780 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
2e790 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  T).int sqlite3Db
2e7a0 73 74 61 74 52 65 67 69 73 74 65 72 28 73 71 6c  statRegister(sql
2e7b0 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ite3*);.#endif..
2e7c0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 56  int sqlite3ExprV
2e7d0 65 63 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a  ectorSize(Expr *
2e7e0 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
2e7f0 74 65 33 45 78 70 72 49 73 56 65 63 74 6f 72 28  te3ExprIsVector(
2e800 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78  Expr *pExpr);.Ex
2e810 70 72 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f  pr *sqlite3Vecto
2e820 72 46 69 65 6c 64 53 75 62 65 78 70 72 28 45 78  rFieldSubexpr(Ex
2e830 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20  pr*, int);.Expr 
2e840 2a 73 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56  *sqlite3ExprForV
2e850 65 63 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65  ectorField(Parse
2e860 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f  *,Expr*,int);.vo
2e870 69 64 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72  id sqlite3Vector
2e880 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c  ErrorMsg(Parse*,
2e890 20 45 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65   Expr*);..#ifnde
2e8a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
2e8b0 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
2e8c0 53 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73  S.const char **s
2e8d0 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74  qlite3CompileOpt
2e8e0 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29  ions(int *pnOpt)
2e8f0 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66  ;.#endif..#endif
2e900 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20   /* SQLITEINT_H 
2e910 2a 2f 0a                                         */.