/ Hex Artifact Content
Login

Artifact 392de8f6d2e3d6c88cd1a998dc2fa90bbdb146cb440cc7a1abc62d478c69df12:


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 45 78 70 72 53 70  ef struct ExprSp
8cc0: 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70  an ExprSpan;.typ
8cd0: 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79  edef struct FKey
8ce0: 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73   FKey;.typedef s
8cf0: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
8d00: 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63  ctor FuncDestruc
8d10: 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tor;.typedef str
8d20: 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63  uct FuncDef Func
8d30: 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Def;.typedef str
8d40: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
8d50: 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70  FuncDefHash;.typ
8d60: 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69  edef struct IdLi
8d70: 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64  st IdList;.typed
8d80: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20  ef struct Index 
8d90: 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73  Index;.typedef s
8da0: 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
8db0: 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74  e IndexSample;.t
8dc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
8dd0: 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b  yClass KeyClass;
8de0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8df0: 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b  KeyInfo KeyInfo;
8e00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e10: 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73  Lookaside Lookas
8e20: 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ide;.typedef str
8e30: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
8e40: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b  t LookasideSlot;
8e50: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e60: 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74  Module Module;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61  ypedef struct Na
8e80: 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f  meContext NameCo
8e90: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
8ea0: 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73  truct Parse Pars
8eb0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8ec0: 74 20 50 72 65 55 70 64 61 74 65 20 50 72 65 55  t PreUpdate PreU
8ed0: 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66 20 73  pdate;.typedef s
8ee0: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
8ef0: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
8f00: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
8f10: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
8f20: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
8f30: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
8f40: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
8f50: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
8f60: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
8f70: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
8f80: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
8f90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fa0: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
8fb0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
8fc0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
8fd0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
8fe0: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
8ff0: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
9000: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
9010: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9020: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
9030: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
9040: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
9050: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
9060: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
9070: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
9080: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
9090: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
90a0: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
90b0: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
90c0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
90d0: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
90e0: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
90f0: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
9100: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
9110: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9120: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
9130: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9140: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
9150: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9160: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
9170: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
9180: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
9190: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
91a0: 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a  t With With;../*
91b0: 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74 20   A VList object 
91c0: 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69 6e  records a mappin
91d0: 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d 65  g between parame
91e0: 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f 77  ters/variables/w
91f0: 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74  ildcards.** in t
9200: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
9210: 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c 20   (such as $abc, 
9220: 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61  @pqr, or :xyz) a
9230: 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a 2a  nd the integer.*
9240: 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  * variable numbe
9250: 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
9260: 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65 72  h that parameter
9270: 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d 61  .  See the forma
9280: 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a  t description.**
9290: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 56   on the sqlite3V
92a0: 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69 6e  ListAdd() routin
92b0: 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72  e for more infor
92c0: 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74  mation.  A VList
92d0: 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75   is really.** ju
92e0: 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69  st an array of i
92f0: 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65  ntegers..*/.type
9300: 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a  def int VList;..
9310: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
9320: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
9330: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
9340: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
9350: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
9360: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
9370: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
9380: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
9390: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
93a0: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
93b0: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
93c0: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
93d0: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
93e0: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
93f0: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
9400: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
9410: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  h".#include "os.
9420: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
9430: 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51  ex.h"../* The SQ
9440: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
9450: 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  LE compile-time 
9460: 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73  option used to s
9470: 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a  et the default.*
9480: 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  * synchronous se
9490: 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20  tting to EXTRA. 
94a0: 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72   It is no longer
94b0: 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23   supported..*/.#
94c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54  ifdef SQLITE_EXT
94d0: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72  RA_DURABLE.# war
94e0: 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f  ning Use SQLITE_
94f0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9500: 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66  OUS=3 instead of
9510: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9520: 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53  RABLE.# define S
9530: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9540: 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64  NCHRONOUS 3.#end
9550: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c  if../*.** Defaul
9560: 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65  t synchronous le
9570: 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  vels..**.** Note
9580: 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f   that (for histo
9590: 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68  rcal reasons) th
95a0: 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  e PAGER_SYNCHRON
95b0: 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66  OUS_* macros dif
95c0: 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  fer.** from the 
95d0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
95e0: 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65  YNCHRONOUS value
95f0: 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20   by 1..**.**    
9600: 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e         PAGER_SYN
9610: 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44  CHRONOUS       D
9620: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9630: 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20  US.**   OFF     
9640: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9660: 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20  0.**   NORMAL   
9670: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
9680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
9690: 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20  .**   FULL      
96a0: 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20      3           
96b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 0a                2.
96c0: 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20 20  **   EXTRA      
96d0: 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20 20     4            
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a               3.*
96f0: 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41  *.** The "PRAGMA
9700: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74   synchronous" st
9710: 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65  atement also use
9720: 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  s the zero-based
9730: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20   numbers..** In 
9740: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
9750: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9760: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
9770: 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e   all external in
9780: 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20  terfaces.** and 
9790: 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61  the one-based va
97a0: 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  lues are used in
97b0: 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66  ternally..*/.#if
97c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
97d0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
97e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
97f0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9800: 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69 66  OUS 2.#endif.#if
9810: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9820: 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e  ULT_WAL_SYNCHRON
9830: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
9840: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f  ITE_DEFAULT_WAL_
9850: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49  SYNCHRONOUS SQLI
9860: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9870: 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f  RONOUS.#endif../
9880: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
9890: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
98a0: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
98b0: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
98c0: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
98d0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
98e0: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
98f0: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
9900: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
9910: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
9920: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
9930: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
9940: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
9950: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
9960: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
9970: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
9980: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
9990: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
99a0: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
99b0: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
99c0: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
99d0: 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20   *zDbSName;     
99e0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
99f0: 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68 65   database. (sche
9a00: 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c  ma name, not fil
9a10: 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65  ename) */.  Btre
9a20: 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
9a30: 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73   /* The B*Tree s
9a40: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69  tructure for thi
9a50: 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  s database file 
9a60: 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c  */.  u8 safety_l
9a70: 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77  evel;     /* How
9a80: 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20 73   aggressive at s
9a90: 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64  yncing data to d
9aa0: 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e  isk */.  u8 bSyn
9ab0: 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  cSet;         /*
9ac0: 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d 41   True if "PRAGMA
9ad0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20   synchronous=N" 
9ae0: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a  has been run */.
9af0: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
9b00: 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a;     /* Pointe
9b10: 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63  r to database sc
9b20: 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73  hema (possibly s
9b30: 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  hared) */.};../*
9b40: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
9b50: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
9b60: 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65   structure store
9b70: 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68  s a database sch
9b80: 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20  ema..**.** Most 
9b90: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
9ba0: 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  re associated wi
9bb0: 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65  th a Btree.  The
9bc0: 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a   exception is.**
9bd0: 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20   the Schema for 
9be0: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65  the TEMP databae
9bf0: 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31  s (sqlite3.aDb[1
9c00: 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65  ]) which is free
9c10: 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e  -standing..** In
9c20: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
9c30: 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68  de, a single Sch
9c40: 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62  ema object can b
9c50: 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  e shared by mult
9c60: 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74  iple.** Btrees t
9c70: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
9c80: 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67   same underlying
9c90: 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74   BtShared object
9ca0: 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f  ..**.** Schema o
9cb0: 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d  bjects are autom
9cc0: 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63  atically dealloc
9cd0: 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  ated when the la
9ce0: 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a  st Btree that.**
9cf0: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d   references them
9d00: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20   is destroyed.  
9d10: 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61   The TEMP Schema
9d20: 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65   is manually fre
9d30: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
9d40: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41  _close()..*.** A
9d50: 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20   thread must be 
9d60: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
9d70: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
9d80: 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72  ding Btree in or
9d90: 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73  der.** to access
9da0: 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e   Schema content.
9db0: 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74    This implies t
9dc0: 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d  hat the thread m
9dd0: 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68  ust also be.** h
9de0: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
9df0: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f  n the sqlite3 co
9e00: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
9e10: 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42   that owns the B
9e20: 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54  tree..** For a T
9e30: 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79  EMP Schema, only
9e40: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
9e50: 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65  mutex is require
9e60: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68  d..*/.struct Sch
9e70: 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65  ema {.  int sche
9e80: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  ma_cookie;   /* 
9e90: 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  Database schema 
9ea0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
9eb0: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
9ec0: 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f    int iGeneratio
9ed0: 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61  n;     /* Genera
9ee0: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49  tion counter.  I
9ef0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
9f00: 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20  each change */. 
9f10: 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20   Hash tblHash;  
9f20: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62        /* All tab
9f30: 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  les indexed by n
9f40: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64  ame */.  Hash id
9f50: 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  xHash;        /*
9f60: 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64   All (named) ind
9f70: 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  ices indexed by 
9f80: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  name */.  Hash t
9f90: 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f  rigHash;       /
9fa0: 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69  * All triggers i
9fb0: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
9fc0: 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73  /.  Hash fkeyHas
9fd0: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
9fe0: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20  foreign keys by 
9ff0: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
a000: 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65   name */.  Table
a010: 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20   *pSeqTab;      
a020: 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  /* The sqlite_se
a030: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65  quence table use
a040: 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45  d by AUTOINCREME
a050: 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f  NT */.  u8 file_
a060: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20  format;      /* 
a070: 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65  Schema format ve
a080: 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66  rsion for this f
a090: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ile */.  u8 enc;
a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a0b0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75   Text encoding u
a0c0: 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61  sed by this data
a0d0: 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63  base */.  u16 sc
a0e0: 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f  hemaFlags;     /
a0f0: 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74  * Flags associat
a100: 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68  ed with this sch
a110: 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63  ema */.  int cac
a120: 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a  he_size;      /*
a130: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
a140: 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63   to use in the c
a150: 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ache */.};../*.*
a160: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
a170: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
a180: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
a190: 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a  r bits in the.**
a1a0: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
a1b0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
a1c0: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
a1d0: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
a1e0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
a1f0: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
a200: 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
a210: 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70  ine DbHasAnyProp
a220: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28  erty(D,I,P)  (((
a230: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
a240: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
a250: 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
a260: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44   DbSetProperty(D
a270: 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61  ,I,P)     (D)->a
a280: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a290: 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a  chemaFlags|=(P).
a2a0: 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50  #define DbClearP
a2b0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a2c0: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
a2d0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a2e0: 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41  s&=~(P)../*.** A
a2f0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
a300: 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61  r the DB.pSchema
a310: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
a320: 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65  *.** The DB_Sche
a330: 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73  maLoaded flag is
a340: 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64   set after the d
a350: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
a360: 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20  as been.** read 
a370: 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61  into internal ha
a380: 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  sh tables..**.**
a390: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
a3a0: 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20   means that one 
a3b0: 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61  or more views ha
a3c0: 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ve column names 
a3d0: 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65  that.** have bee
a3e0: 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49  n filled out.  I
a3f0: 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  f the schema cha
a400: 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75  nges, these colu
a410: 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a  mn names might.*
a420: 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f  * changes and so
a430: 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e   the view will n
a440: 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e  eed to be reset.
a450: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53  .*/.#define DB_S
a460: 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30  chemaLoaded    0
a470: 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63  x0001  /* The sc
a480: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f  hema has been lo
a490: 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aded */.#define 
a4a0: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
a4b0: 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f     0x0002  /* So
a4c0: 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65  me views have de
a4d0: 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  fined column nam
a4e0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
a4f0: 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20  _Empty          
a500: 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20   0x0004  /* The 
a510: 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c  file is empty (l
a520: 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a  ength 0 bytes) *
a530: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 52 65 73  /.#define DB_Res
a540: 65 74 57 61 6e 74 65 64 20 20 20 20 20 30 78 30  etWanted     0x0
a550: 30 30 38 20 20 2f 2a 20 52 65 73 65 74 20 74 68  008  /* Reset th
a560: 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 53  e schema when nS
a570: 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a  chemaLock==0 */.
a580: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
a590: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
a5a0: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
a5b0: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
a5c0: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
a5d0: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
a5e0: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
a5f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
a600: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
a610: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
a620: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
a630: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
a640: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
a650: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
a660: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
a670: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
a680: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
a690: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
a6a0: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
a6b0: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
a6c0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
a6d0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
a6e0: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
a6f0: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
a700: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
a710: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
a720: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
a730: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
a740: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
a750: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
a760: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
a770: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
a780: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
a790: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
a7a0: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
a7b0: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
a7c0: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
a7d0: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
a7e0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
a7f0: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
a800: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
a810: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
a820: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
a830: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
a840: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
a850: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
a860: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
a870: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
a880: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
a890: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
a8a0: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
a8b0: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
a8c0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
a8d0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
a8e0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
a8f0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
a900: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
a910: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
a920: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
a930: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
a940: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
a950: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
a960: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
a970: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
a980: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
a990: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
a9a0: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
a9b0: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
a9c0: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
a9d0: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
a9e0: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
a9f0: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
aa00: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
aa10: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
aa20: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
aa30: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
aa40: 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c   {.  u32 bDisabl
aa50: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
aa60: 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65  Only operate the
aa70: 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20   lookaside when 
aa80: 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a  zero */.  u16 sz
aa90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
aaa0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
aab0: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
aac0: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
aad0: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
aae0: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
aaf0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
ab00: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
ab10: 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f 74 3b 20  */.  u32 nSlot; 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ab30: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b 61 73  Number of lookas
ab40: 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61  ide slots alloca
ab50: 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 61 6e 53  ted */.  u32 anS
ab60: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
ab70: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
ab80: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
ab90: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
aba0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
abb0: 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a 20 4c 69   *pInit;   /* Li
abc0: 73 74 20 6f 66 20 62 75 66 66 65 72 73 20 6e 6f  st of buffers no
abd0: 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
abe0: 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  d */.  Lookaside
abf0: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
ac00: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
ac10: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
ac20: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
ac30: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
ac40: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
ac50: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
ac60: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
ac70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
ac80: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
ac90: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
aca0: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
acb0: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
acc0: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
acd0: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
ace0: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
acf0: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
ad00: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
ad10: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
ad20: 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69  able for built-i
ad30: 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  n function defin
ad40: 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63  itions.  (Applic
ad50: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a  ation-defined.**
ad60: 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61   functions use a
ad70: 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74   regular table t
ad80: 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68  able from hash.h
ad90: 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61  .).**.** Hash ea
ada0: 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ch FuncDef struc
adb0: 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ture into one of
adc0: 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68   the FuncDefHash
add0: 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43  .a[] slots..** C
ade0: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e  ollisions are on
adf0: 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70   the FuncDef.u.p
ae00: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23  Hash chain..*/.#
ae10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ae20: 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74  NC_HASH_SZ 23.st
ae30: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
ae40: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
ae50: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
ae60: 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  _SZ];       /* H
ae70: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
ae80: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23  nctions */.};..#
ae90: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
aea0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
aeb0: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
aec0: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
aed0: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
aee0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
aef0: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
af00: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
af10: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
af20: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
af30: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
af40: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
af50: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
af60: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
af70: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
af80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
af90: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
afa0: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
afb0: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afd0: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
afe0: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
aff0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
b000: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
b010: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
b020: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
b030: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
b040: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
b050: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
b060: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
b070: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
b080: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
b090: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
b0a0: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
b0b0: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
b0c0: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
b0d0: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
b0e0: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
b0f0: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
b100: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
b110: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
b120: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
b130: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
b140: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
b150: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
b160: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
b170: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
b180: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
b190: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
b1a0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
b1b0: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
b1c0: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
b1d0: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
b1e0: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
b1f0: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
b200: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
b210: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
b220: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
b230: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
b240: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
b250: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
b260: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
b270: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
b280: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
b290: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
b2a0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
b2b0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
b2c0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b2d0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b2e0: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
b2f0: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
b300: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
b310: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
b320: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
b330: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b340: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
b350: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
b360: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
b370: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b380: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b390: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3b0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
b3c0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
b3d0: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
b3e0: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
b3f0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
b400: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b410: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b420: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b440: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b450: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
b460: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b470: 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73  CATED./* This is
b480: 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45   an extra SQLITE
b490: 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61  _TRACE macro tha
b4a0: 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67  t indicates "leg
b4b0: 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20  acy" tracing.** 
b4c0: 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20  in the style of 
b4d0: 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a  sqlite3_trace().
b4e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b4f0: 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20  E_TRACE_LEGACY  
b500: 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69  0x80.#else.#defi
b510: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
b520: 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66  LEGACY  0.#endif
b530: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
b540: 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a  DEPRECATED */...
b550: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
b560: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
b570: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
b580: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
b590: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
b5a0: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
b5b0: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
b5c0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
b5d0: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
b5e0: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
b5f0: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
b600: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
b610: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
b620: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
b630: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
b640: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
b650: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
b660: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
b670: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
b680: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
b690: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
b6a0: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
b6b0: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b6d0: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
b6e0: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
b6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b700: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
b710: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
b720: 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6d  n use */.  u32 m
b730: 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  DbFlags;        
b740: 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67           /* flag
b750: 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e 74 65  s recording inte
b760: 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20  rnal state */.  
b770: 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b790: 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c 65 20   flags settable 
b7a0: 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65 65 20  by pragmas. See 
b7b0: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c  below */.  i64 l
b7c0: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
b7d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49           /* ROWI
b7e0: 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74  D of most recent
b7f0: 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f   insert (see abo
b800: 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d  ve) */.  i64 szM
b810: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
b820: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
b830: 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74  t mmap_size sett
b840: 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53 63  ing */.  u32 nSc
b850: 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20 20  hemaLock;       
b860: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
b870: 20 72 65 73 65 74 20 74 68 65 20 73 63 68 65 6d   reset the schem
b880: 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  a when non-zero 
b890: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
b8a0: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
b8b0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
b8c0: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
b8d0: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
b8e0: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b900: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
b910: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
b920: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
b930: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
b940: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
b950: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
b960: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
b970: 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73 45  g */.  int iSysE
b980: 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20 20  rrno;           
b990: 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76 61       /* Errno va
b9a0: 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73 79  lue from last sy
b9b0: 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20 20  stem error */.  
b9c0: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b9e0: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
b9f0: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
ba00: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65  ations */.  u8 e
ba10: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
ba20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
ba30: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  t encoding */.  
ba40: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ba60: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
ba70: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
ba80: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
ba90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
baa0: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
bab0: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
bac0: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bae0: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
baf0: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
bb00: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42  ilure */.  u8 bB
bb10: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20  enignMalloc;    
bb20: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
bb30: 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20  ot require OOMs 
bb40: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
bb50: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20  dfltLockMode;   
bb60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
bb70: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  fault locking-mo
bb80: 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20  de for attached 
bb90: 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20  dbs */.  signed 
bba0: 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63  char nextAutovac
bbb0: 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61  ;      /* Autova
bbc0: 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20  c setting after 
bbd0: 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f  VACUUM if >=0 */
bbe0: 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72  .  u8 suppressEr
bbf0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
bc00: 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65   /* Do not issue
bc10: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
bc20: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
bc30: 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20  vtabOnConflict; 
bc40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
bc50: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f  lue to return fo
bc60: 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e  r s3_vtab_on_con
bc70: 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20  flict() */.  u8 
bc80: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
bc90: 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72  epoint;    /* Tr
bca0: 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d  ue if the outerm
bcb0: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73  ost savepoint is
bcc0: 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54   a TS */.  u8 mT
bcd0: 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20 20  race;           
bce0: 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f           /* zero
bcf0: 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f   or more SQLITE_
bd00: 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20  TRACE flags */. 
bd10: 20 75 38 20 73 6b 69 70 42 74 72 65 65 4d 75 74   u8 skipBtreeMut
bd20: 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ex;            /
bd30: 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61  * True if no sha
bd40: 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e  red-cache backen
bd50: 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45  ds */.  u8 nSqlE
bd60: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
bd70: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
bd80: 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71  of pending OP_Sq
bd90: 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f  lExec opcodes */
bda0: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
bdb0: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
bdc0: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
bdd0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
bde0: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be00: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
be10: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
be20: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
be30: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
be40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be50: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
be60: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
be70: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
be80: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
be90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
bea0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
beb0: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
bec0: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
bed0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
bee0: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
bef0: 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  its */.  int nMa
bf00: 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20  xSorterMmap;    
bf10: 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
bf20: 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e  m size of region
bf30: 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74  s mapped by sort
bf40: 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  er */.  struct s
bf50: 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b  qlite3InitInfo {
bf60: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
bf70: 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67  tion used during
bf80: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
bf90: 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e  */.    int newTn
bfa0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
bfb0: 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f     /* Rootpage o
bfc0: 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  f table being in
bfd0: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
bfe0: 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20   u8 iDb;        
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c000: 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73  Which db file is
c010: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
c020: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73  ed */.    u8 bus
c030: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
c040: 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66        /* TRUE if
c050: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69   currently initi
c060: 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75  alizing */.    u
c070: 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b  8 orphanTrigger;
c080: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
c090: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  st statement is 
c0a0: 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72  orphaned TEMP tr
c0b0: 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  igger */.    u8 
c0c0: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20  imposterTable;  
c0d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c           /* Buil
c0e0: 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72  ding an imposter
c0f0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e   table */.  } in
c100: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
c110: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
c120: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c130: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
c140: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
c150: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
c160: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c170: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c180: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
c190: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
c1a0: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c1c0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c1d0: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
c1e0: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
c1f0: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
c200: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c210: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
c220: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
c230: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ec() */.  int nV
c240: 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20  Destroy;        
c250: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c260: 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56  r of active OP_V
c270: 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
c280: 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  ns */.  int nExt
c290: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
c2a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c2b0: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
c2c0: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
c2d0: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
c2e0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
c2f0: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
c300: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
c310: 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33  int (*xTrace)(u3
c320: 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f  2,void*,void*,vo
c330: 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61  id*);     /* Tra
c340: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
c350: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
c360: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c370: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c380: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
c390: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
c3a0: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
c3b0: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
c3c0: 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50  har*,u64);  /* P
c3d0: 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f  rofiling functio
c3e0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  n */.  void *pPr
c3f0: 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20  ofileArg;       
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c410: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c420: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
c430: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
c440: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
c450: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c460: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
c470: 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e  llback() */.  in
c480: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
c490: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
c4a0: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
c4b0: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
c4c0: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
c4d0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c4e0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c4f0: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
c500: 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ack() */.  void 
c510: 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  (*xRollbackCallb
c520: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20  ack)(void*); /* 
c530: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
c540: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
c550: 69 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a  id *pUpdateArg;.
c560: 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65    void (*xUpdate
c570: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
c580: 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
c590: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c  ,const char*,sql
c5a0: 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64  ite_int64);.#ifd
c5b0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
c5c0: 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
c5d0: 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61    void *pPreUpda
c5e0: 74 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  teArg;          
c5f0: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
c600: 74 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43  t to xPreUpdateC
c610: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
c620: 64 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61  d (*xPreUpdateCa
c630: 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65  llback)(   /* Re
c640: 67 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73  gistered using s
c650: 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65  qlite3_preupdate
c660: 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76  _hook() */.    v
c670: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
c680: 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68  t,char const*,ch
c690: 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65  ar const*,sqlite
c6a0: 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f  3_int64,sqlite3_
c6b0: 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65  int64.  );.  Pre
c6c0: 55 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61  Update *pPreUpda
c6d0: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  te;        /* Co
c6e0: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
c6f0: 20 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c   pre-update call
c700: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  back */.#endif /
c710: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
c720: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a  PREUPDATE_HOOK *
c730: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
c740: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
c750: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
c760: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
c770: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
c780: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
c790: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
c7a0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
c7b0: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
c7c0: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
c7d0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
c7e0: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
c7f0: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
c800: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
c810: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
c820: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
c830: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
c840: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
c850: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
c860: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
c870: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
c880: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
c890: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
c8a0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
c8b0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
c8c0: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
c8d0: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
c8e0: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
c8f0: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
c900: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
c910: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
c920: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
c930: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
c940: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
c950: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
c960: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73  UTHORIZATION.  s
c970: 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75  qlite3_xauth xAu
c980: 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  th;          /* 
c990: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
c9a0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
c9b0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
c9c0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c9d0: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
c9e0: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
c9f0: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
ca00: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
ca10: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
ca20: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
ca30: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
ca40: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
ca50: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
ca60: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
ca70: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
ca80: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
ca90: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
caa0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
cab0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
cac0: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
cad0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
cae0: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
caf0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
cb00: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
cb10: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
cb20: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
cb30: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
cb40: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
cb50: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
cb60: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
cb70: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
cb80: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
cb90: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
cba0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
cbb0: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
cbc0: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
cbd0: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
cbe0: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
cbf0: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
cc00: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
cc10: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
cc20: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
cc30: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
cc40: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
cc50: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
cc60: 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65  ;    /* Disconne
cc70: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
cc80: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
cc90: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42  () */.  void *pB
cca0: 65 73 74 49 6e 64 65 78 43 74 78 3b 20 20 20 20  estIndexCtx;    
ccb0: 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 71 6c        /* For sql
ccc0: 69 74 65 33 5f 76 74 61 62 5f 63 6f 6c 6c 61 74  ite3_vtab_collat
ccd0: 69 6f 6e 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  ion() */.#endif.
cce0: 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20    Hash aFunc;   
ccf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd00: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
cd10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
cd20: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
cd30: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
cd40: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
cd50: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
cd60: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
cd70: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
cd80: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
cd90: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
cda0: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
cdb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
cdc0: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
cdd0: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
cde0: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
cdf0: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
ce00: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
ce10: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
ce20: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
ce30: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
ce40: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
ce50: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
ce60: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
ce70: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ce90: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
cea0: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
ceb0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
cec0: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
ced0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
cee0: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
cef0: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
cf00: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
cf10: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
cf20: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
cf30: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
cf40: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
cf50: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
cf60: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
cf70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
cf80: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
cf90: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
cfa0: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
cfb0: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
cfc0: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
cfd0: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
cfe0: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23  in DbFree() */.#
cff0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
d000: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
d010: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
d020: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
d030: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
d040: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
d050: 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78  ASTER.  ** mutex
d060: 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33  , not by sqlite3
d070: 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65  .mutex. They are
d080: 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e   used by code in
d090: 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a   notify.c..  **.
d0a0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c    ** When X.pUnl
d0b0: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ockConnection==Y
d0c0: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
d0d0: 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66  t X is waiting f
d0e0: 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c  or Y to.  ** unl
d0f0: 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63  ock so that it c
d100: 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a  an proceed..  **
d110: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c  .  ** When X.pBl
d120: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
d130: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
d140: 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74  that something t
d150: 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a  hat X tried.  **
d160: 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63   tried to do rec
d170: 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74  ently failed wit
d180: 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  h an SQLITE_LOCK
d190: 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20  ED error due to 
d1a0: 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20  locks.  ** held 
d1b0: 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  by Y..  */.  sql
d1c0: 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43  ite3 *pBlockingC
d1d0: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f  onnection; /* Co
d1e0: 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61  nnection that ca
d1f0: 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  used SQLITE_LOCK
d200: 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ED */.  sqlite3 
d210: 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  *pUnlockConnecti
d220: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  on;           /*
d230: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77   Connection to w
d240: 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20  atch for unlock 
d250: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f  */.  void *pUnlo
d260: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
d270: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
d280: 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63  gument to xUnloc
d290: 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69  kNotify */.  voi
d2a0: 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66  d (*xUnlockNotif
d2b0: 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29  y)(void **, int)
d2c0: 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74  ;  /* Unlock not
d2d0: 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ify callback */.
d2e0: 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74    sqlite3 *pNext
d2f0: 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20  Blocked;        
d300: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20  /* Next in list 
d310: 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63  of all blocked c
d320: 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65  onnections */.#e
d330: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
d340: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
d350: 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33  CATION.  sqlite3
d360: 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20  _userauth auth; 
d370: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61         /* User a
d380: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e  uthentication in
d390: 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e  formation */.#en
d3a0: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20  dif.};../*.** A 
d3b0: 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65  macro to discove
d3c0: 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  r the encoding o
d3d0: 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  f a database..*/
d3e0: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
d3f0: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
d400: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
d410: 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  nc).#define ENC(
d420: 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29  db)        ((db)
d430: 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ->enc)../*.** Po
d440: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
d450: 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c  r the sqlite3.fl
d460: 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ags..**.** Value
d470: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
d480: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
d490: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51  t()):.**      SQ
d4a0: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
d4b0: 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c     == PAGER_FULL
d4c0: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
d4d0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
d4e0: 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54  nc == PAGER_CKPT
d4f0: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
d500: 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53     SQLITE_CacheS
d510: 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52  pill    == PAGER
d520: 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a  _CACHE_SPILL.*/.
d530: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
d540: 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78  riteSchema    0x
d550: 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20  00000001  /* OK 
d560: 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45  to update SQLITE
d570: 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69  _MASTER */.#defi
d580: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
d590: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30  FileFmt  0x00000
d5a0: 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  002  /* Create n
d5b0: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
d5c0: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
d5d0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43  ine SQLITE_FullC
d5e0: 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30  olNames   0x0000
d5f0: 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75  0004  /* Show fu
d600: 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ll column names 
d610: 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65  on SELECT */.#de
d620: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
d630: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
d640: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
d650: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
d660: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
d670: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
d680: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30  llFSync  0x00000
d690: 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  010  /* Use full
d6a0: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
d6b0: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
d6c0: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
d6d0: 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32  ll     0x0000002
d6e0: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c  0  /* OK to spil
d6f0: 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f  l pager cache */
d700: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d710: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
d720: 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68  x00000040  /* Sh
d730: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
d740: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
d750: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
d760: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ws      0x000000
d770: 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  80  /* Count row
d780: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
d790: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
d7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7c0: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
d7d0: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
d7e0: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d810: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
d820: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
d830: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
d840: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
d850: 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f     0x00000100  /
d860: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
d870: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
d880: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
d890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d8b0: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
d8c0: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
d8d0: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
d8e0: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30  Checks   0x00000
d8f0: 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  200  /* Do not e
d900: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
d910: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
d920: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
d930: 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30  ncommit   0x0000
d940: 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e  0400  /* READ UN
d950: 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61  COMMITTED in sha
d960: 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65  red-cache */.#de
d970: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b  fine SQLITE_NoCk
d980: 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30  ptOnClose  0x000
d990: 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65  00800  /* No che
d9a0: 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65  ckpoint on close
d9b0: 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65  ()/DETACH */.#de
d9c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
d9d0: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
d9e0: 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  01000  /* Revers
d9f0: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
da00: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
da10: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
da20: 73 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20  s    0x00002000 
da30: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
da40: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
da50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
da60: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
da70: 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e  x00004000  /* En
da80: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
da90: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
daa0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dab0: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
dac0: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45  0x00008000  /* E
dad0: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
dae0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
daf0: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
db00: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30  tension  0x00010
db10: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
db20: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
db30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
db40: 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30  LoadExtFunc    0
db50: 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e  x00020000  /* En
db60: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
db70: 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a  ion() SQL func *
db80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
db90: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
dba0: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54  0x00040000  /* T
dbb0: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
dbc0: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
dbd0: 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  e SQLITE_DeferFK
dbe0: 73 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30  s       0x000800
dbf0: 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c  00  /* Defer all
dc00: 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
dc10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dc20: 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20  E_QueryOnly     
dc30: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
dc40: 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65  Disable database
dc50: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
dc60: 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53  ine SQLITE_CellS
dc70: 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30  izeCk     0x0020
dc80: 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62  0000  /* Check b
dc90: 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20  tree cell sizes 
dca0: 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69  on load */.#defi
dcb0: 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f  ne SQLITE_Fts3To
dcc0: 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30  kenizer  0x00400
dcd0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66  000  /* Enable f
dce0: 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29  ts3_tokenizer(2)
dcf0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd00: 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20  TE_EnableQPSG   
dd10: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
dd20: 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53   Query Planner S
dd30: 74 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74  tability Guarant
dd40: 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ee*/.#define SQL
dd50: 49 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20  ITE_TriggerEQP  
dd60: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
dd70: 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45  * Show trigger E
dd80: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
dd90: 4e 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20 75  N */../* Flags u
dda0: 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65 62 75  sed only if debu
ddb0: 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64 65 66 20  gging */.#ifdef 
ddc0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65  SQLITE_DEBUG.#de
ddd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54  fine SQLITE_SqlT
dde0: 72 61 63 65 20 20 20 20 20 20 20 30 78 30 38 30  race       0x080
ddf0: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
de00: 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20  print SQL as it 
de10: 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66  executes */.#def
de20: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  ine SQLITE_VdbeL
de30: 69 73 74 69 6e 67 20 20 20 20 30 78 31 30 30 30  isting    0x1000
de40: 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c  0000  /* Debug l
de50: 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20  istings of VDBE 
de60: 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66  programs */.#def
de70: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
de80: 72 61 63 65 20 20 20 20 20 20 30 78 32 30 30 30  race      0x2000
de90: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
dea0: 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63   trace VDBE exec
deb0: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
dec0: 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f   SQLITE_VdbeAddo
ded0: 70 54 72 61 63 65 20 30 78 34 30 30 30 30 30 30  pTrace 0x4000000
dee0: 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69  0  /* Trace sqli
def0: 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63  te3VdbeAddOp() c
df00: 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alls */.#define 
df10: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20  SQLITE_VdbeEQP  
df20: 20 20 20 20 20 20 30 78 38 30 30 30 30 30 30 30        0x80000000
df30: 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41    /* Debug EXPLA
df40: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f  IN QUERY PLAN */
df50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
df60: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
df70: 72 20 73 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61  r sqlite3.mDbFla
df80: 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  gs.*/.#define DB
df90: 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67  FLAG_SchemaChang
dfa0: 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55  e   0x0001  /* U
dfb0: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
dfc0: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
dfd0: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
dfe0: 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30  PreferBuiltin  0
dff0: 78 30 30 30 32 20 20 2f 2a 20 50 72 65 66 65 72  x0002  /* Prefer
e000: 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e  ence to built-in
e010: 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e   funcs */.#defin
e020: 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75 6d 20  e DBFLAG_Vacuum 
e030: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
e040: 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e 20  /* Currently in 
e050: 61 20 56 41 43 55 55 4d 20 2a 2f 0a 0a 2f 2a 0a  a VACUUM */../*.
e060: 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73  ** Bits of the s
e070: 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67  qlite3.dbOptFlag
e080: 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65  s field that are
e090: 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20   used by the.** 
e0a0: 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
e0b0: 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54  trol(SQLITE_TEST
e0c0: 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CTRL_OPTIMIZATIO
e0d0: 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63  NS,...) interfac
e0e0: 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76  e to.** selectiv
e0f0: 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69  ely disable vari
e100: 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
e110: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s..*/.#define SQ
e120: 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65  LITE_QueryFlatte
e130: 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20  ner 0x0001   /* 
e140: 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67  Query flattening
e150: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e160: 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20  TE_ColumnCache  
e170: 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f    0x0002   /* Co
e180: 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64  lumn cache */.#d
e190: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f  efine SQLITE_Gro
e1a0: 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30  upByOrder   0x00
e1b0: 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20  04   /* GROUPBY 
e1c0: 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59  cover of ORDERBY
e1d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e1e0: 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73  TE_FactorOutCons
e1f0: 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f  t 0x0008   /* Co
e200: 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67  nstant factoring
e210: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e220: 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20  TE_DistinctOpt  
e230: 20 20 30 78 30 30 31 30 20 20 20 2f 2a 20 44 49    0x0010   /* DI
e240: 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64  STINCT using ind
e250: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
e260: 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53  SQLITE_CoverIdxS
e270: 63 61 6e 20 20 20 30 78 30 30 32 30 20 20 20 2f  can   0x0020   /
e280: 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  * Covering index
e290: 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   scans */.#defin
e2a0: 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79  e SQLITE_OrderBy
e2b0: 49 64 78 4a 6f 69 6e 20 30 78 30 30 34 30 20 20  IdxJoin 0x0040  
e2c0: 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20   /* ORDER BY of 
e2d0: 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20  joins via index 
e2e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e2f0: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
e300: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 54 72 61   0x0080   /* Tra
e310: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
e320: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
e330: 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f  QLITE_OmitNoopJo
e340: 69 6e 20 20 20 30 78 30 31 30 30 20 20 20 2f 2a  in   0x0100   /*
e350: 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62   Omit unused tab
e360: 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a  les in joins */.
e370: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
e380: 6f 75 6e 74 4f 66 56 69 65 77 20 20 20 20 30 78  ountOfView    0x
e390: 30 32 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f  0200   /* The co
e3a0: 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69  unt-of-view opti
e3b0: 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mization */.#def
e3c0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73 6f  ine SQLITE_Curso
e3d0: 72 48 69 6e 74 73 20 20 20 20 30 78 30 34 30 30  rHints    0x0400
e3e0: 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72     /* Add OP_Cur
e3f0: 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73 20  sorHint opcodes 
e400: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e410: 45 5f 53 74 61 74 33 34 20 20 20 20 20 20 20 20  E_Stat34        
e420: 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65   0x0800   /* Use
e430: 20 53 54 41 54 33 20 6f 72 20 53 54 41 54 34 20   STAT3 or STAT4 
e440: 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48  data */.   /* TH
e450: 33 20 65 78 70 65 63 74 73 20 74 68 65 20 53 74  3 expects the St
e460: 61 74 33 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c  at34  ^^^^^^ val
e470: 75 65 20 74 6f 20 62 65 20 30 78 30 38 30 30 2e  ue to be 0x0800.
e480: 20 20 44 6f 6e 27 74 20 63 68 61 6e 67 65 20 69    Don't change i
e490: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
e4a0: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
e4b0: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
e4c0: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
e4d0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
e4e0: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
e4f0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
e500: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
e510: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
e520: 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ed..*/.#define O
e530: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
e540: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28  led(db, mask)  (
e550: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
e560: 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64  s&(mask))!=0).#d
e570: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
e580: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
e590: 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62  sk)   (((db)->db
e5a0: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
e5b0: 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ==0)../*.** Retu
e5c0: 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b  rn true if it OK
e5d0: 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74   to factor const
e5e0: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
e5f0: 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  into the initial
e600: 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e  ization.** code.
e610: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   The argument is
e620: 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20   a Parse object 
e630: 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e  for the code gen
e640: 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69  erator..*/.#defi
e650: 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b  ne ConstFactorOk
e660: 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73  (P) ((P)->okCons
e670: 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20  tFactor)../*.** 
e680: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
e690: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
e6a0: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
e6b0: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
e6c0: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
e6d0: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
e6e0: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
e6f0: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
e700: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
e710: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
e720: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e730: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
e740: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
e750: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
e760: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e770: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
e780: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
e790: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
e7a0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
e7b0: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
e7c0: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
e7d0: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
e7e0: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
e7f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e800: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
e810: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
e820: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
e830: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
e840: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
e850: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
e860: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
e870: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
e880: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
e890: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
e8a0: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
e8b0: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
e8c0: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
e8d0: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
e8e0: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
e8f0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
e900: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
e910: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
e920: 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67  tructure.  For g
e930: 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66  lobal built-in f
e940: 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75  unctions (ex: su
e950: 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63  bstr(), max(), c
e960: 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69  ount()).** a poi
e970: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
e980: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
e990: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42 75 69  n the sqlite3Bui
e9a0: 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62  ltinFunctions ob
e9b0: 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72  ject..** For per
e9c0: 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c  -connection appl
e9d0: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
e9e0: 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69  functions, a poi
e9f0: 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20  nter to this.** 
ea00: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
ea10: 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61  d in the db->aHa
ea20: 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  sh hash table..*
ea30: 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68  *.** The u.pHash
ea40: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
ea50: 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69  y the global bui
ea60: 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70  lt-ins.  The u.p
ea70: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69  Destructor.** fi
ea80: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 70  eld is used by p
ea90: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70  er-connection ap
eaa0: 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e  p-def functions.
eab0: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
eac0: 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20  ef {.  i8 nArg; 
ead0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
eae0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
eaf0: 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e  ts.  -1 means un
eb00: 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36  limited */.  u16
eb10: 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20   funcFlags;     
eb20: 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e    /* Some combin
eb30: 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f  ation of SQLITE_
eb40: 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64  FUNC_* */.  void
eb50: 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20   *pUserData;    
eb60: 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61   /* User data pa
eb70: 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e  rameter */.  Fun
eb80: 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20  cDef *pNext;    
eb90: 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69    /* Next functi
eba0: 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d  on with same nam
ebb0: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  e */.  void (*xS
ebc0: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
ebd0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
ebe0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
ebf0: 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70  func or agg-step
ec00: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69   */.  void (*xFi
ec10: 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f  nalize)(sqlite3_
ec20: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
ec40: 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  gg finalizer */.
ec50: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
ec60: 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61  ame;   /* SQL na
ec70: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
ec80: 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  on. */.  union {
ec90: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48  .    FuncDef *pH
eca0: 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ash;      /* Nex
ecb0: 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65  t with a differe
ecc0: 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20  nt name but the 
ecd0: 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20  same hash */.   
ece0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
ecf0: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
ed00: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
ed10: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
ed20: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20  function */.  } 
ed30: 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  u;.};../*.** Thi
ed40: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
ed50: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
ed60: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
ed70: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
ed80: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
ed90: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
eda0: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
edb0: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
edc0: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
edd0: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
ede0: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
edf0: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
ee00: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
ee10: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
ee20: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
ee30: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
ee40: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
ee50: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a  nRef is set to.*
ee60: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
ee70: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
ee80: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
ee90: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
eea0: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
eeb0: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
eec0: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
eed0: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
eee0: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
eef0: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
ef00: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
ef10: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
ef20: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
ef30: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
ef40: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
ef50: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
ef60: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
ef70: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
ef80: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
ef90: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
efa0: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
efb0: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
efc0: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
efd0: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
efe0: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
eff0: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
f000: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
f010: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
f020: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
f030: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
f040: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
f050: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
f060: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
f070: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
f080: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
f090: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
f0a0: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
f0b0: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
f0c0: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
f0d0: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
f0e0: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
f0f0: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
f100: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e  G_TYPEOFARG.  An
f110: 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43  d.** SQLITE_FUNC
f120: 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62  _CONSTANT must b
f130: 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51  e the same as SQ
f140: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
f150: 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  IC.  There.** ar
f160: 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
f170: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
f180: 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73  e to verify this
f190: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
f1a0: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
f1b0: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
f1c0: 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ):.**     SQLITE
f1d0: 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20  _FUNC_MINMAX    
f1e0: 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ==  NC_MinMaxAgg
f1f0: 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d        == SF_MinM
f200: 61 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c  axAgg.**     SQL
f210: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
f220: 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45     ==  OPFLAG_LE
f230: 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53  NGTHARG.**     S
f240: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
f250: 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f  F    ==  OPFLAG_
f260: 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20  TYPEOFARG.**    
f270: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
f280: 53 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54  STANT  ==  SQLIT
f290: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20  E_DETERMINISTIC 
f2a0: 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20  from the API.** 
f2b0: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
f2c0: 45 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64  ENCMASK   depend
f2d0: 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a  s on SQLITE_UTF*
f2e0: 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41   macros in the A
f2f0: 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  PI.*/.#define SQ
f300: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
f310: 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c  K  0x0003 /* SQL
f320: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
f330: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
f340: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
f350: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
f360: 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61      0x0004 /* Ca
f370: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
f380: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
f390: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
f3a0: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
f3b0: 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65    0x0008 /* Case
f3c0: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
f3d0: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
f3e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f3f0: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
f400: 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  0010 /* Ephemera
f410: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
f420: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
f430: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
f440: 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73  COLL 0x0020 /* s
f450: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
f460: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
f470: 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65  called*/.#define
f480: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
f490: 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20  GTH   0x0040 /* 
f4a0: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
f4b0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
f4c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f4d0: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38  C_TYPEOF   0x008
f4e0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
f4f0: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
f500: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f510: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
f520: 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0100 /* Built-
f530: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
f540: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
f550: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
f560: 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20  LESCE 0x0200 /* 
f570: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
f580: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
f590: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f5a0: 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
f5b0: 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0400 /* Built-
f5c0: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
f5d0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
f5e0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
f5f0: 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a  NSTANT 0x0800 /*
f600: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
f610: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
f620: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
f630: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
f640: 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f  INMAX   0x1000 /
f650: 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
f660: 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
f670: 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  gates */.#define
f680: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
f690: 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20  CHNG  0x2000 /* 
f6a0: 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56  "Slow Change". V
f6b0: 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75  alue constant du
f6c0: 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20  ring a.         
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6e0: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69             ** si
f6f0: 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67  ngle query - mig
f700: 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74  ht change over t
f710: 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ime */.#define S
f720: 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e  QLITE_FUNC_AFFIN
f730: 49 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75  ITY 0x4000 /* Bu
f740: 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28  ilt-in affinity(
f750: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f  ) function */../
f760: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
f770: 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
f780: 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
f790: 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
f7a0: 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
f7b0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
f7c0: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
f7d0: 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
f7e0: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
f7f0: 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
f800: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
f810: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
f820: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
f830: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
f840: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
f850: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
f860: 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65  e.**     impleme
f870: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
f880: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
f890: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
f8a0: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
f8b0: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
f8c0: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
f8d0: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
f8e0: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
f8f0: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
f900: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
f910: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
f920: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
f930: 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74  .**     argument
f940: 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68   bNC is true, th
f950: 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  en the SQLITE_FU
f960: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67  NC_NEEDCOLL flag
f970: 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20   is set..**.**  
f980: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
f990: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
f9a0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
f9b0: 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
f9c0: 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
f9d0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
f9e0: 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a  ONSTANT flag..**
f9f0: 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28  .**   DFUNCTION(
fa00: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
fa10: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
fa20: 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
fa30: 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
fa40: 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
fa50: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
fa60: 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64  g and.**     add
fa70: 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
fa80: 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20  C_SLOCHNG flag. 
fa90: 20 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26   Used for date &
faa0: 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a   time functions.
fab0: 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74  **     and funct
fac0: 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65  ions like sqlite
fad0: 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20  _version() that 
fae0: 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20  can change, but 
faf0: 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20  not during.**   
fb00: 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79    a single query
fb10: 2e 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69  .  The iArg is i
fb20: 67 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65  gnored.  The use
fb30: 72 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73  r-data is always
fb40: 20 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61   set.**     to a
fb50: 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20   NULL pointer.  
fb60: 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65  The bNC paramete
fb70: 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  r is not used..*
fb80: 2a 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45  *.**   PURE_DATE
fb90: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
fba0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
fbb0: 2a 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20  **     Used for 
fbc0: 22 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65  "pure" date/time
fbd0: 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73   functions, this
fbe0: 20 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44   macro is like D
fbf0: 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20  FUNCTION.**     
fc00: 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64  except that it d
fc10: 6f 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49  oes set the SQLI
fc20: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
fc30: 20 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73   flags.  iArg is
fc40: 0a 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20  .**     ignored 
fc50: 61 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74  and the user-dat
fc60: 61 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63  a for these func
fc70: 74 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20  tions is set to 
fc80: 61 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74  an .**     arbit
fc90: 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f  rary non-NULL po
fca0: 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20  inter.  The bNC 
fcb0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
fcc0: 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41   used..**.**   A
fcd0: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
fce0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
fcf0: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a   xStep, xFinal).
fd00: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
fd10: 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61  reate an aggrega
fd20: 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  te function defi
fd30: 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nition implement
fd40: 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65  ed by.**     the
fd50: 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74   C functions xSt
fd60: 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54  ep and xFinal. T
fd70: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61  he first four pa
fd80: 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20  rameters.**     
fd90: 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
fda0: 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
fdb0: 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70  as the first 4 p
fdc0: 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20  arameters to.** 
fdd0: 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a      FUNCTION()..
fde0: 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43  **.**   LIKEFUNC
fdf0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
fe00: 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20  rg, flags).**   
fe10: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
fe20: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
fe30: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
fe40: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
fe50: 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63  e.**     that ac
fe60: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
fe70: 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c  ents and is impl
fe80: 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c  emented by a cal
fe90: 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75  l to C.**     fu
fea0: 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e  nction likeFunc.
feb0: 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69   Argument pArg i
fec0: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
fed0: 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a  d *) and made.**
fee0: 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61       available a
fef0: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75  s the function u
ff00: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
ff10: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20  3_user_data()). 
ff20: 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44  The.**     FuncD
ff30: 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c  ef.flags variabl
ff40: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
ff50: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
ff60: 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20  the flags.**    
ff70: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23   parameter..*/.#
ff80: 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28  define FUNCTION(
ff90: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
ffa0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
ffb0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
ffc0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
ffd0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
ffe0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
fff0: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10000 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
10010 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
10020 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10030 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f  #define VFUNCTIO
10040 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
10050 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10060 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10070 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10080 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10090 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
100a0 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
100b0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
100c0 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
100d0 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a  fine DFUNCTION(z
100e0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
100f0 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
10100 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10110 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
10120 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30  ITE_UTF8, \.   0
10130 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
10140 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
10150 66 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a  fine PURE_DATE(z
10160 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10170 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
10180 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10190 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
101a0 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f  ITE_UTF8|SQLITE_
101b0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c  FUNC_CONSTANT, \
101c0 0a 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69  .   (void*)&sqli
101d0 74 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46  te3Config, 0, xF
101e0 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
101f0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55  {0} }.#define FU
10200 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e  NCTION2(zName, n
10210 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10220 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67  xFunc, extraFlag
10230 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c  s) \.  {nArg,SQL
10240 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10250 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
10260 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
10270 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
10280 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f  ags,\.   SQLITE_
10290 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
102a0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
102b0 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
102c0 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f  fine STR_FUNCTIO
102d0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  N(zName, nArg, p
102e0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
102f0 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10300 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
10310 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10320 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10330 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
10340 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
10350 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e  #zName, }.#defin
10360 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65  e LIKEFUNC(zName
10370 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61  , nArg, arg, fla
10380 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
10390 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
103a0 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
103b0 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69  flags, \.   (voi
103c0 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65  d *)arg, 0, like
103d0 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
103e0 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41   {0} }.#define A
103f0 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
10400 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
10410 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a  Step, xFinal) \.
10420 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10430 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
10440 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
10450 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
10460 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
10470 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
10480 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
10490 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61  e AGGREGATE2(zNa
104a0 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
104b0 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
104c0 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
104d0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
104e0 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
104f0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
10500 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20  xtraFlags, \.   
10510 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
10520 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
10530 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20  ,xFinal,#zName, 
10540 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20  {0}}../*.** All 
10550 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e  current savepoin
10560 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
10570 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73   a linked list s
10580 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71  tarting at.** sq
10590 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
105a0 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
105b0 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ent in the list 
105c0 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  is the most rece
105d0 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73  ntly.** opened s
105e0 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f  avepoint. Savepo
105f0 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74  ints are added t
10600 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68  o the list by th
10610 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76  e vdbe.** OP_Sav
10620 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
10630 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61  on..*/.struct Sa
10640 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72  vepoint {.  char
10650 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
10660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10670 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d  /* Savepoint nam
10680 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  e (nul-terminate
10690 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  d) */.  i64 nDef
106a0 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
106b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
106c0 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
106d0 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20  d fk violations 
106e0 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
106f0 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
10700 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10710 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69  er of deferred i
10720 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65  mm fk. */.  Save
10730 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20  point *pNext;   
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10750 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f  /* Parent savepo
10760 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  int (if any) */.
10770 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
10780 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64  llowing are used
10790 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70   as the second p
107a0 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
107b0 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a  te3Savepoint(),.
107c0 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31  ** and as the P1
107d0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
107e0 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
107f0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64  struction..*/.#d
10800 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
10810 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65  BEGIN      0.#de
10820 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
10830 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66  ELEASE    1.#def
10840 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f  ine SAVEPOINT_RO
10850 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a  LLBACK   2.../*.
10860 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d  ** Each SQLite m
10870 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74  odule (virtual t
10880 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29  able definition)
10890 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
108a0 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
108b0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
108c0 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64  tructure, stored
108d0 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
108e0 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20  aModule.** hash 
108f0 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
10900 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73   Module {.  cons
10910 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
10920 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20   *pModule;      
10930 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69   /* Callback poi
10940 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  nters */.  const
10950 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
10960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10970 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74  /* Name passed t
10980 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
10990 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  ) */.  void *pAu
109a0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
109b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
109c0 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72  Aux passed to cr
109d0 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
109e0 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
109f0 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  oy)(void *);    
10a00 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c          /* Modul
10a10 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  e destructor fun
10a20 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65  ction */.  Table
10a30 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20   *pEpoTab;      
10a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a50 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62  /* Eponymous tab
10a60 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75  le for this modu
10a70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
10a80 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
10a90 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
10aa0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
10ab0 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
10ac0 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
10ad0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
10ae0 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
10af0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
10b00 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
10b10 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74   column, \000, t
10b20 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a  hen the type */.
10b30 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20    Expr *pDflt;  
10b40 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61     /* Default va
10b50 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
10b60 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  mn */.  char *zC
10b70 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c  oll;     /* Coll
10b80 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
10b90 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68   If NULL, use th
10ba0 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  e default */.  u
10bb0 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20  8 notNull;      
10bc0 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66  /* An OE_ code f
10bd0 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f  or handling a NO
10be0 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
10bf0 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  t */.  char affi
10c00 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  nity;   /* One o
10c10 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
10c20 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20  _... values */. 
10c30 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20   u8 szEst;      
10c40 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
10c50 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20  ize of value in 
10c60 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a  this column. siz
10c70 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20  eof(INT)==1 */. 
10c80 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20   u8 colFlags;   
10c90 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f    /* Boolean pro
10ca0 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f  perties.  See CO
10cb0 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62  LFLAG_ defines b
10cc0 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  elow */.};../* A
10cd0 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
10ce0 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67  r Column.colFlag
10cf0 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s:.*/.#define CO
10d00 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30  LFLAG_PRIMKEY  0
10d10 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75  x0001    /* Colu
10d20 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  mn is part of th
10d30 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
10d40 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
10d50 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32  _HIDDEN   0x0002
10d60 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20      /* A hidden 
10d70 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74  column in a virt
10d80 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ual table */.#de
10d90 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53  fine COLFLAG_HAS
10da0 54 59 50 45 20 20 30 78 30 30 30 34 20 20 20 20  TYPE  0x0004    
10db0 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c  /* Type name fol
10dc0 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  lows column name
10dd0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f   */../*.** A "Co
10de0 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
10df0 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  " is defined by 
10e00 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
10e10 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
10e20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65  structure. Conce
10e30 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61  ptually, a colla
10e40 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f  ting sequence co
10e50 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65  nsists of a name
10e60 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72   and.** a compar
10e70 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61  ison routine tha
10e80 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72  t defines the or
10e90 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75  der of that sequ
10ea0 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43  ence..**.** If C
10eb0 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e  ollSeq.xCmp is N
10ec0 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
10ed0 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
10ee0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
10ef0 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
10f00 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
10f10 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
10f20 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
10f30 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
10f40 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
10f50 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
10f60 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
10f70 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
10f80 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
10f90 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
10fa0 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
10fb0 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
10fc0 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
10fd0 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
10fe0 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64  xCmp() */.  void
10ff0 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20   *pUser;        
11000 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
11010 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f  ent to xCmp() */
11020 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76  .  int (*xCmp)(v
11030 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
11040 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  void*, int, cons
11050 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
11060 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
11070 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
11080 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a  for pUser */.};.
11090 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
110a0 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
110b0 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
110c0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
110d0 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
110e0 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
110f0 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
11100 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
11110 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
11120 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
11130 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
11140 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e  ine SQLITE_SO_UN
11150 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f  DEFINED -1 /* No
11160 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63   sort order spec
11170 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ified */../*.** 
11180 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  Column affinity 
11190 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  types..**.** The
111a0 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20  se used to have 
111b0 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69  mnemonic name li
111c0 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54  ke 'i' for SQLIT
111d0 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e  E_AFF_INTEGER an
111e0 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c  d.** 't' for SQL
111f0 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42  ITE_AFF_TEXT.  B
11200 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61  ut we can save a
11210 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e   little space an
11220 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65  d improve.** the
11230 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20   speed a little 
11240 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65  by numbering the
11250 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74   values consecut
11260 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74  ively..**.** But
11270 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61   rather than sta
11280 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20  rt with 0 or 1, 
11290 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41  we begin with 'A
112a0 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a  '.  That way,.**
112b0 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61   when multiple a
112c0 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72  ffinity types ar
112d0 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69  e concatenated i
112e0 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64  nto a string and
112f0 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20  .** used as the 
11300 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79  P4 operand, they
11310 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65   will be more re
11320 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  adable..**.** No
11330 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65  te also that the
11340 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61   numeric types a
11350 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74  re grouped toget
11360 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74  her so that test
11370 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d  ing.** for a num
11380 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73  eric type is a s
11390 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e  ingle comparison
113a0 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20  .  And the BLOB 
113b0 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a  type is first..*
113c0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
113d0 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41  _AFF_BLOB     'A
113e0 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
113f0 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42  _AFF_TEXT     'B
11400 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
11410 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43  _AFF_NUMERIC  'C
11420 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
11430 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44  _AFF_INTEGER  'D
11440 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
11450 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45  _AFF_REAL     'E
11460 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  '..#define sqlit
11470 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e  e3IsNumericAffin
11480 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51  ity(X)  ((X)>=SQ
11490 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
114a0 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  )../*.** The SQL
114b0 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c  ITE_AFF_MASK val
114c0 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68  ues masks off th
114d0 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69  e significant bi
114e0 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69  ts of an.** affi
114f0 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23  nity value..*/.#
11500 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11510 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a  F_MASK     0x47.
11520 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
11530 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
11540 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
11550 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
11560 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
11570 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
11580 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
11590 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69  E_NOTNULL flag i
115a0 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  s a combination 
115b0 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55  of NULLEQ and JU
115c0 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20  MPIFNULL..** It 
115d0 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74  causes an assert
115e0 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69  () to fire if ei
115f0 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20  ther operand to 
11600 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  a comparison.** 
11610 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c  operator is NULL
11620 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74  .  It is added t
11630 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72  o certain compar
11640 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74  ison operators t
11650 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20  o.** prove that 
11660 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65  the operands are
11670 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c   always NOT NULL
11680 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
11690 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20  ITE_KEEPNULL    
116a0 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62   0x08  /* Used b
116b0 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c  y vector == or <
116c0 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  > */.#define SQL
116d0 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20  ITE_JUMPIFNULL  
116e0 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20   0x10  /* jumps 
116f0 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
11700 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  d is NULL */.#de
11710 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52  fine SQLITE_STOR
11720 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f  EP2      0x20  /
11730 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
11740 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72  n reg[P2] rather
11750 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64   than jump */.#d
11760 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c  efine SQLITE_NUL
11770 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20  LEQ       0x80  
11780 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a  /* NULL=NULL */.
11790 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
117a0 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30  OTNULL      0x90
117b0 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
117c0 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65   operands are ne
117d0 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ver NULL */../*.
117e0 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
117f0 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
11800 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
11810 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
11820 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
11830 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
11840 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61  *.** If the data
11850 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
11860 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72  hared, then ther
11870 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63  e is one instanc
11880 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72  e of this.** str
11890 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20  ucture for each 
118a0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
118b0 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74  ion (sqlite3*) t
118c0 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61  hat uses the sha
118d0 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54  red.** schema. T
118e0 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65  his is because e
118f0 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
11900 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  nection requires
11910 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a   its own unique.
11920 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
11930 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
11940 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20   handle used to 
11950 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
11960 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c  al table.** impl
11970 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69  ementation. sqli
11980 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
11990 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61  s can not be sha
119a0 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64  red between.** d
119b0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
119c0 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74  ons, even when t
119d0 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69  he rest of the i
119e0 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
119f0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73  e.** schema is s
11a00 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
11a10 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
11a20 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
11a30 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
11a40 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
11a50 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
11a60 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
11a70 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
11a80 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
11a90 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
11aa0 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
11ab0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
11ac0 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
11ad0 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
11ae0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
11af0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
11b00 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c  access real tabl
11b10 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65  es.** within the
11b20 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68   database. So th
11b30 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61  at they appear a
11b40 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61  s part of the ca
11b50 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63  llers.** transac
11b60 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65  tion, these acce
11b70 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20  sses need to be 
11b80 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d  made via the sam
11b90 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
11ba0 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74  nnection as that
11bb0 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65   used to execute
11bc0 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20   SQL operations 
11bd0 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
11be0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  able..**.** All 
11bf0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74  VTable objects t
11c00 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  hat correspond t
11c10 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
11c20 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20   in a shared.** 
11c30 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
11c40 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74  are initially st
11c50 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
11c60 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f  -list pointed to
11c70 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65   by.** the Table
11c80 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20  .pVTable member 
11c90 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20  variable of the 
11ca0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61  corresponding Ta
11cb0 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57  ble object..** W
11cc0 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70  hen an sqlite3_p
11cd0 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69  repare() operati
11ce0 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74  on is required t
11cf0 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
11d00 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69  tual.** table, i
11d10 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c  t searches the l
11d20 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62  ist for the VTab
11d30 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  le that correspo
11d40 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61  nds to the.** da
11d50 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
11d60 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70  n doing the prep
11d70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75  aring so as to u
11d80 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a  se the correct.*
11d90 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  * sqlite3_vtab* 
11da0 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f  handle in the co
11db0 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a  mpiled query..**
11dc0 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d  .** When an in-m
11dd0 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65  emory Table obje
11de0 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66  ct is deleted (f
11df0 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20  or example when 
11e00 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  the.** schema is
11e10 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20   being reloaded 
11e20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29  for some reason)
11e30 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a  , the VTable obj
11e40 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  ects are not.** 
11e50 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
11e60 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
11e70 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44  ndles are not xD
11e80 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a  isconnect()ed.**
11e90 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e   immediately. In
11ea0 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20  stead, they are 
11eb0 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54  moved from the T
11ec0 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73  able.pVTable lis
11ed0 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20  t to.** another 
11ee0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
11ef0 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
11f00 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65  3.pDisconnect me
11f10 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63  mber of the.** c
11f20 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
11f30 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20  ite3 structure. 
11f40 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65  They are then de
11f50 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63  leted/xDisconnec
11f60 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65  ted.** next time
11f70 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20   a statement is 
11f80 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73  prepared using s
11f90 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68  aid sqlite3*. Th
11fa0 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f  is is done.** to
11fb0 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20   avoid deadlock 
11fc0 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67  issues involving
11fd0 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65   multiple sqlite
11fe0 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e  3.mutex mutexes.
11ff0 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d  .** Refer to com
12000 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63  ments above func
12010 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62  tion sqlite3Vtab
12020 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72  UnlockList() for
12030 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69   an.** explanati
12040 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20  on as to why it 
12050 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61  is safe to add a
12060 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71  n entry to an sq
12070 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
12080 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75  t.** list withou
12090 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f  t holding the co
120a0 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
120b0 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e  te3.mutex mutex.
120c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
120d0 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66  y for objects of
120e0 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
120f0 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62  ways allocated b
12100 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61  y.** sqlite3DbMa
12110 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68  lloc(), using th
12120 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
12130 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54  dle stored in VT
12140 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68  able.db as.** th
12150 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
12160 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62  ..*/.struct VTab
12170 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  le {.  sqlite3 *
12180 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  db;             
12190 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e   /* Database con
121a0 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  nection associat
121b0 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62  ed with this tab
121c0 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a  le */.  Module *
121d0 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20  pMod;           
121e0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
121f0 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
12200 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  ation */.  sqlit
12210 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20  e3_vtab *pVtab; 
12220 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
12230 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65  to vtab instance
12240 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12260 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
12270 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74  nters to this st
12280 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20  ructure */.  u8 
12290 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20  bConstraint;    
122a0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
122b0 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  f constraints ar
122c0 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20  e supported */. 
122d0 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
122e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
122f0 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50  pth of the SAVEP
12300 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20  OINT stack */.  
12310 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20  VTable *pNext;  
12320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
12330 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74  t in linked list
12340 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
12350 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63  };../*.** The sc
12360 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51  hema for each SQ
12370 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77  L table and view
12380 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
12390 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20  in memory.** by 
123a0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
123b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
123c0 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
123d0 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72  t Table {.  char
123e0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
123f0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
12400 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f  table or view */
12410 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b  .  Column *aCol;
12420 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
12430 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
12440 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
12450 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
12460 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51     /* List of SQ
12470 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69  L indexes on thi
12480 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65  s table. */.  Se
12490 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
124a0 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74     /* NULL for t
124b0 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74  ables.  Points t
124c0 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20  o definition if 
124d0 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65  a view. */.  FKe
124e0 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20  y *pFKey;       
124f0 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
12500 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20   of all foreign 
12510 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62  keys in this tab
12520 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  le */.  char *zC
12530 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20  olAff;       /* 
12540 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
12550 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
12560 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
12570 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
12580 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
12590 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
125a0 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
125b0 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e           /*   ..
125c0 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63  . also used as c
125d0 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20  olumn name list 
125e0 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69  in a VIEW */.  i
125f0 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
12600 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65      /* Root BTre
12610 65 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20  e page for this 
12620 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e  table */.  u32 n
12630 54 61 62 52 65 66 3b 20 20 20 20 20 20 20 20 20  TabRef;         
12640 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
12650 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61  nters to this Ta
12660 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74 61 62  ble */.  u32 tab
12670 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 2f 2a  Flags;        /*
12680 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61   Mask of TF_* va
12690 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20 69 50  lues */.  i16 iP
126a0 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
126b0 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
126c0 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
126d0 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  y] as the rowid 
126e0 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20  */.  i16 nCol;  
126f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12700 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
12710 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
12720 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67    LogEst nRowLog
12730 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61  Est;   /* Estima
12740 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c  ted rows in tabl
12750 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  e - from sqlite_
12760 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20  stat1 table */. 
12770 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77   LogEst szTabRow
12780 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
12790 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20  ed size of each 
127a0 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74  table row in byt
127b0 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  es */.#ifdef SQL
127c0 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d  ITE_ENABLE_COSTM
127d0 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73  ULT.  LogEst cos
127e0 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f  tMult;     /* Co
127f0 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f  st multiplier fo
12800 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61 62  r using this tab
12810 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75  le */.#endif.  u
12820 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20  8 keyConf;      
12830 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64      /* What to d
12840 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69  o in case of uni
12850 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74  queness conflict
12860 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66   on iPKey */.#if
12870 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12880 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e  _ALTERTABLE.  in
12890 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20  t addColOffset; 
128a0 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20     /* Offset in 
128b0 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d  CREATE TABLE stm
128c0 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  t to add a new c
128d0 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  olumn */.#endif.
128e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
128f0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
12900 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72  .  int nModuleAr
12910 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  g;      /* Numbe
12920 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
12930 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a  o the module */.
12940 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c    char **azModul
12950 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64  eArg;  /* 0: mod
12960 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a  ule 1: schema 2:
12970 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a   vtab name 3...:
12980 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c   args */.  VTabl
12990 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20  e *pVTable;     
129a0 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c  /* List of VTabl
129b0 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65  e objects. */.#e
129c0 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a  ndif.  Trigger *
129d0 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c  pTrigger;   /* L
129e0 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20  ist of triggers 
129f0 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d  stored in pSchem
12a00 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  a */.  Schema *p
12a10 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
12a20 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61  chema that conta
12a30 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ins this table *
12a40 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74  /.  Table *pNext
12a50 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74  Zombie;  /* Next
12a60 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a   on the Parse.pZ
12a70 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f  ombieTab list */
12a80 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
12a90 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61  ed values for Ta
12aa0 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a  ble.tabFlags..**
12ab0 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  .** TF_OOOHidden
12ac0 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c   applies to tabl
12ad0 65 73 20 6f 72 20 76 69 65 77 20 74 68 61 74 20  es or view that 
12ae0 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  have hidden colu
12af0 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20  mns that are.** 
12b00 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d  followed by non-
12b10 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20  hidden columns. 
12b20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41   Example:  "CREA
12b30 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
12b40 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62   x USING.** vtab
12b50 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22  1(a HIDDEN, b);"
12b60 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20  .  Since "b" is 
12b70 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  a non-hidden col
12b80 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68  umn but "a" is h
12b90 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46  idden,.** the TF
12ba0 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69  _OOOHidden attri
12bb0 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79  bute would apply
12bc0 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20   in this case.  
12bd0 53 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75  Such tables requ
12be0 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68  ire.** special h
12bf0 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49  andling during I
12c00 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67  NSERT processing
12c10 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  ..*/.#define TF_
12c20 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20  Readonly        
12c30 30 78 30 30 30 31 20 20 20 20 2f 2a 20 52 65 61  0x0001    /* Rea
12c40 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
12c50 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
12c60 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
12c70 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
12c80 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
12c90 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
12ca0 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
12cb0 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 61 62  0x0004    /* Tab
12cc0 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
12cd0 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
12ce0 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  TF_Autoincrement
12cf0 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
12d00 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
12d10 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
12d20 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
12d30 54 46 5f 48 61 73 53 74 61 74 31 20 20 20 20 20  TF_HasStat1     
12d40 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20     0x0010    /* 
12d50 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65 74 20 66  nRowLogEst set f
12d60 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
12d70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57   */.#define TF_W
12d80 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30  ithoutRowid    0
12d90 78 30 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72  x0020    /* No r
12da0 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b  owid.  PRIMARY K
12db0 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f  EY is the key */
12dc0 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69  .#define TF_NoVi
12dd0 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78 30 30  sibleRowid  0x00
12de0 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72  40    /* No user
12df0 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22  -visible "rowid"
12e00 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69   column */.#defi
12e10 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ne TF_OOOHidden 
12e20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 20 20        0x0080    
12e30 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20  /* Out-of-Order 
12e40 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a  hidden columns *
12e50 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53 74 61  /.#define TF_Sta
12e60 74 73 55 73 65 64 20 20 20 20 20 20 20 30 78 30  tsUsed       0x0
12e70 31 30 30 20 20 20 20 2f 2a 20 51 75 65 72 79 20  100    /* Query 
12e80 70 6c 61 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e  planner decision
12e90 73 20 61 66 66 65 63 74 65 64 20 62 79 0a 20 20  s affected by.  
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ec0 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f     ** Index.aiRo
12ed0 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65 73  wLogEst[] values
12ee0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48   */.#define TF_H
12ef0 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30  asNotNull      0
12f00 78 30 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74  x0200    /* Cont
12f10 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ains NOT NULL co
12f20 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a  nstraints */../*
12f30 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
12f40 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
12f50 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
12f60 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
12f70 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
12f80 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
12f90 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
12fa0 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
12fb0 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
12fc0 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
12fd0 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
12fe0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
12ff0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
13000 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
13010 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
13020 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72   ((X)->nModuleAr
13030 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  g).#else.#  defi
13040 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
13050 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f       0.#endif../
13060 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
13070 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f  etermine if a co
13080 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20  lumn is hidden. 
13090 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
130a0 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c  nColumn().** onl
130b0 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d  y works for non-
130c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28  virtual tables (
130d0 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20  ordinary tables 
130e0 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20 69  and views) and i
130f0 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73  s.** always fals
13100 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f  e unless SQLITE_
13110 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
13120 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64  LUMNS is defined
13130 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64  .  The.** IsHidd
13140 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f  enColumn() macro
13150 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70   is general purp
13160 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ose..*/.#if defi
13170 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
13180 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
13190 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
131a0 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
131b0 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c        (((X)->col
131c0 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
131d0 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64  HIDDEN)!=0).#  d
131e0 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
131f0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
13200 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
13210 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
13220 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66  )!=0).#elif !def
13230 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
13240 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
13250 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
13260 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
13270 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
13280 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
13290 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
132a0 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
132b0 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
132c0 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
132d0 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
132e0 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64 65           0.#  de
132f0 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
13300 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
13310 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65  .#endif.../* Doe
13320 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65  s the table have
13330 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66   a rowid */.#def
13340 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20  ine HasRowid(X) 
13350 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
13360 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74  ags & TF_Without
13370 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69  Rowid)==0).#defi
13380 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28  ne VisibleRowid(
13390 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61  X) (((X)->tabFla
133a0 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c  gs & TF_NoVisibl
133b0 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a  eRowid)==0)../*.
133c0 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
133d0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
133e0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
133f0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
13400 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
13410 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
13420 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
13430 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
13440 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
13450 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
13460 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
13470 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
13480 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
13490 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
134a0 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
134b0 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
134c0 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
134d0 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
134e0 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
134f0 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
13500 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
13510 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
13520 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
13530 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
13540 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
13550 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
13560 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
13570 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
13580 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
13590 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
135a0 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
135b0 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
135c0 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20  le is "ex2"..** 
135d0 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73  Equivalent names
135e0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d  :.**.**     from
135f0 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d  -table == child-
13600 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74  table.**       t
13610 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e  o-table == paren
13620 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61  t-table.**.** Ea
13630 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
13640 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
13650 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
13660 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
13670 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
13680 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
13690 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
136a0 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
136b0 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
136c0 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
136d0 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
136e0 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
136f0 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
13700 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a  not checked..**.
13710 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61  ** The list of a
13720 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63  ll parents for c
13730 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20  hild Table X is 
13740 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e  held at X.pFKey.
13750 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  .**.** A list of
13760 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f   all children fo
13770 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  r a table named 
13780 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e  Z (which might n
13790 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a  ot even exist).*
137a0 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68  * is held in Sch
137b0 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74  ema.fkeyHash wit
137c0 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20  h a hash key of 
137d0 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  Z..*/.struct FKe
137e0 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
137f0 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
13800 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
13810 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
13820 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
13830 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
13840 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b  rom;  /* Next FK
13850 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ey with the same
13860 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20   in pFrom. Next 
13870 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20  parent of pFrom 
13880 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
13890 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
138a0 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
138b0 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
138c0 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
138d0 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
138e0 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
138f0 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e   the same zTo. N
13900 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f  ext child of zTo
13910 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72  . */.  FKey *pPr
13920 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76  evTo;    /* Prev
13930 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61  ious with the sa
13940 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  me zTo */.  int 
13950 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
13960 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
13970 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
13980 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33  /.  /* EV: R-303
13990 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38  23-21917 */.  u8
139a0 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20   isDeferred;    
139b0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
139c0 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
139d0 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
139e0 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
139f0 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
13a00 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54       /* ON DELET
13a10 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20  E and ON UPDATE 
13a20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74  actions, respect
13a30 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67  ively */.  Trigg
13a40 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d  er *apTrigger[2]
13a50 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72  ;/* Triggers for
13a60 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f   aAction[] actio
13a70 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ns */.  struct s
13a80 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a  ColMap {      /*
13a90 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
13aa0 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
13ab0 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
13ac0 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
13ae0 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
13af0 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
13b00 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
13b10 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
13b20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
13b30 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d  If NULL use PRIM
13b40 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
13b50 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  Col[1];         
13b60 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
13b70 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c  for each of nCol
13b80 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a   columns */.};..
13b90 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
13ba0 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
13bb0 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
13bc0 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  olve a constrain
13bd0 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c  t.** error.  ROL
13be0 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67  LBACK processing
13bf0 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f   means that a co
13c00 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
13c10 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65  on.** causes the
13c20 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
13c30 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e  ocess to fail an
13c40 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
13c50 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
13c60 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
13c70 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65  ck.  ABORT proce
13c80 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20  ssing means the 
13c90 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
13ca0 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e  cess.** fails an
13cb0 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e  d any prior chan
13cc0 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e  ges from that on
13cd0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
13ce0 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62  backed out,.** b
13cf0 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ut the transacti
13d00 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64  on is not rolled
13d10 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f   back.  FAIL pro
13d20 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
13d30 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74  at.** the operat
13d40 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
13d50 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e  stops and return
13d60 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  s an error code.
13d70 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63    But prior.** c
13d80 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68  hanges due to th
13d90 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
13da0 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20   are not backed 
13db0 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62  out and no rollb
13dc0 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20  ack.** occurs.  
13dd0 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61  IGNORE means tha
13de0 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  t the particular
13df0 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64   row that caused
13e00 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a   the constraint.
13e10 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  ** error is not 
13e20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
13e30 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  ted.  Processing
13e40 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
13e50 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  o error.** is re
13e60 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45  turned.  REPLACE
13e70 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65   means that pree
13e80 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
13e90 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65   rows that cause
13ea0 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f  d.** a UNIQUE co
13eb0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
13ec0 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73  on are removed s
13ed0 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69  o that the new i
13ee0 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61  nsert or.** upda
13ef0 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20  te can proceed. 
13f00 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
13f10 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
13f20 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a  or is reported..
13f30 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20  **.** RESTRICT, 
13f40 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53  SETNULL, and CAS
13f50 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70  CADE actions app
13f60 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69  ly only to forei
13f70 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54  gn keys..** REST
13f80 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65  RICT is the same
13f90 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d   as ABORT for IM
13fa0 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20  MEDIATE foreign 
13fb0 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20  keys and the.** 
13fc0 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b  same as ROLLBACK
13fd0 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65   for DEFERRED ke
13fe0 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61  ys.  SETNULL mea
13ff0 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65  ns that the fore
14000 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65  ign.** key is se
14010 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43  t to NULL.  CASC
14020 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ADE means that a
14030 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
14040 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65  E of the.** refe
14050 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77  renced table row
14060 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69   is propagated i
14070 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74  nto the row that
14080 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f   holds the.** fo
14090 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  reign key..**.**
140a0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
140b0 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
140c0 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
140d0 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
140e0 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
140f0 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
14100 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
14110 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
14120 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
14130 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
14140 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
14150 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
14160 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
14170 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
14180 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
14190 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
141a0 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
141b0 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
141c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
141d0 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
141e0 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
141f0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
14200 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
14210 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
14220 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
14230 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
14240 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
14250 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
14260 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
14270 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
14280 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
14290 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
142a0 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
142b0 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66   UPDATE */..#def
142c0 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
142d0 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  6   /* OE_Abort 
142e0 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
142f0 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
14300 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
14310 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37  ne OE_SetNull  7
14320 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
14330 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
14340 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
14350 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38  ne OE_SetDflt  8
14360 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
14370 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
14380 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
14390 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
143a0 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73  cade  9   /* Cas
143b0 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
143c0 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
143d0 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20  Default  10  /* 
143e0 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
143f0 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
14400 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
14410 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
14420 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
14430 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
14440 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
14450 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
14460 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
14470 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
14480 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f  ontrol the.** co
14490 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
144a0 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
144b0 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
144c0 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64  aSortOrder[] and
144d0 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46   aColl[] have nF
144e0 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54  ield+1 slots.  T
144f0 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65  here.** are nFie
14500 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65  ld slots for the
14510 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69   columns of an i
14520 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78  ndex then one ex
14530 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20  tra slot.** for 
14540 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65  the rowid at the
14550 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
14560 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20  KeyInfo {.  u32 
14570 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
14580 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66  /* Number of ref
14590 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20  erences to this 
145a0 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a  KeyInfo object *
145b0 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
145c0 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
145d0 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
145e0 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
145f0 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
14600 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20 20  6 nKeyField;    
14610 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b    /* Number of k
14620 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ey columns in th
14630 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36  e index */.  u16
14640 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20   nAllField;     
14650 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e   /* Total column
14660 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79  s, including key
14670 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a   plus others */.
14680 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
14690 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
146a0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
146b0 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
146c0 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
146d0 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
146e0 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f   column. */.  Co
146f0 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
14700 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
14710 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
14720 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
14730 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
14740 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20  is object holds 
14750 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 68  a record which h
14760 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  as been parsed o
14770 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
14780 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f  al.** fields, fo
14790 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
147a0 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72  f doing a compar
147b0 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  ison..**.** A re
147c0 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
147d0 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
147e0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
147f0 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
14800 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
14810 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
14820 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
14830 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
14840 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
14850 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
14860 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
14870 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
14880 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
14890 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
148a0 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
148b0 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
148c0 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
148d0 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
148e0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
148f0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72   this object ser
14900 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20 66  ves as a "key" f
14910 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63  or doing a searc
14920 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78  h on.** an index
14930 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61   b+tree. The goa
14940 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20  l of the search 
14950 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65  is to find the e
14960 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20  ntry that.** is 
14970 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65  closed to the ke
14980 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74  y described by t
14990 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69  his object.  Thi
149a0 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68  s object might h
149b0 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72  old.** just a pr
149c0 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e  efix of the key.
149d0 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20    The number of 
149e0 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20  fields is given 
149f0 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e  by.** pKeyInfo->
14a00 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  nField..**.** Th
14a10 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c  e r1 and r2 fiel
14a20 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75 65  ds are the value
14a30 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74  s to return if t
14a40 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20  his key is less 
14a50 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74  than.** or great
14a60 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e  er than a key in
14a70 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73 70   the btree, resp
14a80 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65  ectively.  These
14a90 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a   are normally.**
14aa0 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65   -1 and +1 respe
14ab0 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67  ctively, but mig
14ac0 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20 74  ht be inverted t
14ad0 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74  o +1 and -1 if t
14ae0 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20  he b-tree.** is 
14af0 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a  in DESC order..*
14b00 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
14b10 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
14b20 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72  s actually retur
14b30 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65  n default_rc whe
14b40 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61  n they find.** a
14b50 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69  n equals compari
14b60 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63  son.  default_rc
14b70 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f   can be -1, 0, o
14b80 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20  r +1.  If there 
14b90 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  are.** multiple 
14ba0 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 62  entries in the b
14bb0 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20 73  -tree with the s
14bc0 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e  ame key (when on
14bd0 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74  ly looking.** at
14be0 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79 49   the first pKeyI
14bf0 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74  nfo->nFields,) t
14c00 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63  hen default_rc c
14c10 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20  an be set to -1 
14c20 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20  to.** cause the 
14c30 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74  search to find t
14c40 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f  he last match, o
14c50 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68  r +1 to cause th
14c60 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66  e search to.** f
14c70 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d 61  ind the first ma
14c80 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b  tch..**.** The k
14c90 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75  ey comparison fu
14ca0 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74  nctions will set
14cb0 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20   eqSeen to true 
14cc0 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20  if they ever.** 
14cd0 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65  get and equal re
14ce0 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61  sults when compa
14cf0 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63 74  ring this struct
14d00 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20  ure to a b-tree 
14d10 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20  record..** When 
14d20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74  default_rc!=0, t
14d30 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74 20  he search might 
14d40 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65  end up on the re
14d50 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79  cord immediately
14d60 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66  .** before the f
14d70 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d  irst match or im
14d80 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
14d90 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20  the last match. 
14da0 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66   The.** eqSeen f
14db0 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61  ield will indica
14dc0 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  te whether or no
14dd0 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68  t an exact match
14de0 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a   exists in the.*
14df0 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72  * b-tree..*/.str
14e00 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
14e10 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  rd {.  KeyInfo *
14e20 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f  pKeyInfo;  /* Co
14e30 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74  llation and sort
14e40 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69  -order informati
14e50 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  on */.  Mem *aMe
14e60 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
14e70 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
14e80 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
14e90 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
14ea0 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a  ies in apMem[] *
14eb0 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72  /.  i8 default_r
14ec0 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61  c;      /* Compa
14ed0 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20  rison result if 
14ee0 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a  keys are equal *
14ef0 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20  /.  u8 errCode; 
14f00 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
14f10 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65   detected by xRe
14f20 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52  cordCompare (COR
14f30 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a  RUPT or NOMEM) *
14f40 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20 20  /.  i8 r1;      
14f50 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
14f60 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
14f70 68 73 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69  hs < rhs) */.  i
14f80 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20  8 r2;           
14f90 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
14fa0 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
14fb0 72 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53  rhs) */.  u8 eqS
14fc0 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  een;          /*
14fd0 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75 61   True if an equa
14fe0 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20  lity comparison 
14ff0 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
15000 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .};.../*.** Each
15010 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65   SQL index is re
15020 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
15030 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ory by an.** ins
15040 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
15050 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
15060 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75  ..**.** The colu
15070 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
15080 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20   that are to be 
15090 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63  indexed are desc
150a0 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  ribed.** by the 
150b0 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64  aiColumn[] field
150c0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
150d0 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  re.  For example
150e0 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20  , suppose.** we 
150f0 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  have the followi
15100 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64  ng table and ind
15110 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  ex:.**.**     CR
15120 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63  EATE TABLE Ex1(c
15130 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63  1 int, c2 int, c
15140 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20  3 text);.**     
15150 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32  CREATE INDEX Ex2
15160 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a   ON Ex1(c3,c1);.
15170 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62  **.** In the Tab
15180 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73  le structure des
15190 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f  cribing Ex1, nCo
151a0 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65  l==3 because the
151b0 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20  re are.** three 
151c0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
151d0 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e  able.  In the In
151e0 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65  dex structure de
151f0 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c  scribing.** Ex2,
15200 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63   nColumn==2 sinc
15210 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c  e 2 of the 3 col
15220 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20  umns of Ex1 are 
15230 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20  indexed..** The 
15240 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d  value of aiColum
15250 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69  n is {2, 0}.  ai
15260 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63  Column[0]==2 bec
15270 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73  ause the.** firs
15280 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
15290 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
152a0 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
152b0 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
152c0 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
152d0 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
152e0 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
152f0 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
15300 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
15310 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
15320 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
15330 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
15340 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
15350 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
15360 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
15370 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
15380 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
15390 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
153a0 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
153b0 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
153c0 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
153d0 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
153e0 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
153f0 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
15400 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
15410 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
15420 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
15430 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
15440 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a  ict resolution.*
15450 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
15460 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
15470 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
15480 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
15490 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
154a0 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65  ent..**.** While
154b0 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41 54   parsing a CREAT
154c0 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54  E TABLE or CREAT
154d0 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
154e0 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  t in order to.**
154f0 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20 63   generate VDBE c
15500 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20  ode (as opposed 
15510 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72  to parsing one r
15520 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69  ead from an sqli
15530 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62  te_master.** tab
15540 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70 61  le as part of pa
15550 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e  rsing an existin
15560 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  g database schem
15570 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  a), transient in
15580 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68  stances.** of th
15590 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61 79  is structure may
155a0 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20   be created. In 
155b0 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49 6e  this case the In
155c0 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c  dex.tnum variabl
155d0 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  e is.** used to 
155e0 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65 73  store the addres
155f0 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74  s of a VDBE inst
15600 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64  ruction, not a d
15610 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20  atabase page.** 
15620 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f  number (it canno
15630 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73 65  t - the database
15640 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c   page is not all
15650 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65  ocated until the
15660 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d   VDBE.** program
15670 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20 53   is executed). S
15680 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68  ee convertToWith
15690 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20  outRowidTable() 
156a0 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
156b0 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
156c0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
156d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
156e0 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
156f0 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75  */.  i16 *aiColu
15700 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  mn;           /*
15710 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61   Which columns a
15720 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  re used by this 
15730 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30  index.  1st is 0
15740 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69   */.  LogEst *ai
15750 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f  RowLogEst;     /
15760 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20  * From ANALYZE: 
15770 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74  Est. rows select
15780 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d  ed by each colum
15790 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  n */.  Table *pT
157a0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
157b0 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65  /* The SQL table
157c0 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a   being indexed *
157d0 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
157e0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
157f0 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
15800 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
15810 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
15820 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
15830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
15840 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f   next index asso
15850 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
15860 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  same table */.  
15870 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
15880 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65           /* Sche
15890 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
158a0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
158b0 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
158c0 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61         /* for ea
158d0 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d  ch column: True=
158e0 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53  =DESC, False==AS
158f0 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  C */.  const cha
15900 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
15910 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c  /* Array of coll
15920 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
15930 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a  ames for index *
15940 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49  /.  Expr *pPartI
15950 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20  dxWhere;     /* 
15960 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
15970 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73   partial indices
15980 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
15990 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f  aColExpr;      /
159a0 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * Column express
159b0 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  ions */.  int tn
159c0 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
159d0 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f     /* DB Page co
159e0 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66  ntaining root of
159f0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
15a00 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77   LogEst szIdxRow
15a10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  ;         /* Est
15a20 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72  imated average r
15a30 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ow size in bytes
15a40 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f   */.  u16 nKeyCo
15a50 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
15a60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
15a70 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20  mns forming the 
15a80 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f  key */.  u16 nCo
15a90 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
15aa0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
15ab0 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e  olumns stored in
15ac0 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
15ad0 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20  u8 onError;     
15ae0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41           /* OE_A
15af0 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  bort, OE_Ignore,
15b00 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20   OE_Replace, or 
15b10 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73  OE_None */.  uns
15b20 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b  igned idxType:2;
15b30 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51        /* 1==UNIQ
15b40 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b  UE, 2==PRIMARY K
15b50 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e  EY, 0==CREATE IN
15b60 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  DEX */.  unsigne
15b70 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20  d bUnordered:1; 
15b80 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e    /* Use this in
15b90 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e  dex for == or IN
15ba0 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f   queries only */
15bb0 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71  .  unsigned uniq
15bc0 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54  NotNull:1;  /* T
15bd0 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e  rue if UNIQUE an
15be0 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61  d NOT NULL for a
15bf0 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  ll columns */.  
15c00 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a  unsigned isResiz
15c10 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  ed:1;    /* True
15c20 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f   if resizeIndexO
15c30 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65 6e  bject() has been
15c40 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73   called */.  uns
15c50 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67  igned isCovering
15c60 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
15c70 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65 72   this is a cover
15c80 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  ing index */.  u
15c90 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63  nsigned noSkipSc
15ca0 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f  an:1;   /* Do no
15cb0 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69  t try to use ski
15cc0 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a  p-scan if true *
15cd0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68 61 73  /.  unsigned has
15ce0 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20  Stat1:1;     /* 
15cf0 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75  aiRowLogEst valu
15d00 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c  es come from sql
15d10 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75  ite_stat1 */.  u
15d20 6e 73 69 67 6e 65 64 20 62 4e 6f 51 75 65 72 79  nsigned bNoQuery
15d30 3a 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f  :1;     /* Do no
15d40 74 20 75 73 65 20 74 68 69 73 20 69 6e 64 65 78  t use this index
15d50 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75 65   to optimize que
15d60 72 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ries */.#ifdef S
15d70 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
15d80 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e  T3_OR_STAT4.  in
15d90 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20  t nSample;      
15da0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15db0 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20   of elements in 
15dc0 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69  aSample[] */.  i
15dd0 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20  nt nSampleCol;  
15de0 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
15df0 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61  of IndexSample.a
15e00 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20  nEq[] and so on 
15e10 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41  */.  tRowcnt *aA
15e20 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a  vgEq;         /*
15e30 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c   Average nEq val
15e40 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74  ues for keys not
15e50 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20   in aSample */. 
15e60 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53   IndexSample *aS
15e70 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d  ample;    /* Sam
15e80 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74  ples of the left
15e90 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74  -most key */.  t
15ea0 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74  Rowcnt *aiRowEst
15eb0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c  ;       /* Non-l
15ec0 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74 31  ogarithmic stat1
15ed0 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 69   data for this i
15ee0 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  ndex */.  tRowcn
15ef0 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20  t nRowEst0;     
15f00 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
15f10 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20  thmic number of 
15f20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
15f30 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  x */.#endif.};..
15f40 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
15f50 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69  lues for Index.i
15f60 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e  dxType.*/.#defin
15f70 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
15f80 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20  _APPDEF      0  
15f90 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e   /* Created usin
15fa0 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  g CREATE INDEX *
15fb0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
15fc0 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20  _IDXTYPE_UNIQUE 
15fd0 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c       1   /* Impl
15fe0 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20  ements a UNIQUE 
15ff0 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
16000 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
16010 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20  TYPE_PRIMARYKEY 
16020 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50   2   /* Is the P
16030 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74  RIMARY KEY for t
16040 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20  he table */../* 
16050 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
16060 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d  ndex X is a PRIM
16070 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
16080 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61  .#define IsPrima
16090 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28  ryKeyIndex(X)  (
160a0 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51  (X)->idxType==SQ
160b0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
160c0 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74  MARYKEY)../* Ret
160d0 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
160e0 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20  x X is a UNIQUE 
160f0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
16100 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58   IsUniqueIndex(X
16110 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45  )      ((X)->onE
16120 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a  rror!=OE_None)..
16130 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43  /* The Index.aiC
16140 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61  olumn[] values a
16150 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69  re normally posi
16160 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42  tive integer.  B
16170 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  ut.** there are 
16180 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61  some negative va
16190 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73  lues that have s
161a0 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a  pecial meaning:.
161b0 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f  */.#define XN_RO
161c0 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20  WID     (-1)    
161d0 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
161e0 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  mn is the rowid 
161f0 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58  */.#define XN_EX
16200 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20  PR      (-2)    
16210 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
16220 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73  mn is an express
16230 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ion */../*.** Ea
16240 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64  ch sample stored
16250 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
16260 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65  tat3 table is re
16270 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
16280 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ory.** using a s
16290 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
162a0 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
162b0 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
162c0 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
162d0 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
162e0 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
162f0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
16300 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
16310 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
16320 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
16330 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
16340 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
16350 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
16360 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
16370 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
16380 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
16390 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
163a0 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
163b0 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
163c0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
163d0 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
163e0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
163f0 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
16400 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
16410 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
16420 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
16430 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
16440 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
16450 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
16460 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
16470 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
16480 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
16490 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
164a0 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
164b0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
164c0 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
164d0 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
164e0 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
164f0 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
16500 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
16510 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
16520 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
16530 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
16540 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
16550 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
16560 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
16570 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
16580 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
16590 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
165a0 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
165b0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
165c0 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
165d0 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
165e0 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
165f0 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
16600 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
16610 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
16620 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
16630 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
16640 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
16650 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
16660 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
16670 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
16680 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
16690 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
166a0 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
166b0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
166c0 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
166d0 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
166e0 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
166f0 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
16700 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
16710 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
16720 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
16730 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
16740 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
16750 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
16760 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
16770 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
16780 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
16790 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
167a0 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
167b0 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
167c0 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
167d0 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
167e0 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
167f0 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
16800 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
16810 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
16820 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
16830 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
16840 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
16850 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
16860 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
16870 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
16880 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
16890 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
168a0 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
168b0 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
168c0 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
168d0 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
168e0 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16900 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
16910 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
16920 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
16930 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
16940 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
16950 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
16960 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
16970 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
16980 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169a0 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
169b0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
169c0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
169d0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
169e0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
169f0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
16a00 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
16a10 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
16a20 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
16a30 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
16a40 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
16a50 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
16a60 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
16a70 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
16a80 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
16a90 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
16aa0 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
16ab0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
16ac0 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
16ad0 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
16ae0 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
16af0 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
16b00 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
16b10 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
16b20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
16b30 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
16b40 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
16b50 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
16b60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16b70 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
16b80 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16ba0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
16bb0 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
16bc0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
16bd0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
16be0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
16bf0 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
16c00 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
16c10 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
16c20 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
16c30 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
16c40 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
16c50 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
16c60 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
16c70 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
16c80 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
16c90 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
16ca0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
16cb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16cc0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
16cd0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
16ce0 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
16cf0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
16d00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
16d10 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
16d20 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
16d30 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
16d40 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
16d50 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
16d60 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
16d70 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
16da0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
16db0 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
16dc0 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
16dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16de0 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
16df0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
16e00 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
16e10 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
16e20 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
16e30 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
16e40 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
16e50 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
16e60 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
16e70 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
16e80 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
16e90 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
16ea0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16eb0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
16ec0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
16ed0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16ee0 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
16ef0 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
16f00 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
16f10 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
16f20 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
16f30 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
16f40 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
16f50 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
16f60 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
16f70 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
16f80 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
16f90 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
16fa0 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
16fb0 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
16fc0 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
16fd0 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
16fe0 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
16ff0 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
17000 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
17010 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
17020 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
17030 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
17040 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
17050 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
17060 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
17070 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
17080 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
17090 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
170a0 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
170b0 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
170c0 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
170d0 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
170e0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
170f0 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
17100 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
17110 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
17120 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
17130 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
17140 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
17150 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
17160 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
17170 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
17180 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
17190 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
171a0 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
171b0 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
171c0 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
171d0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
171e0 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
171f0 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
17200 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
17210 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
17220 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
17230 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
17240 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
17250 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
17260 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
17270 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
17280 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
17290 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
172a0 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
172b0 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
172c0 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
172d0 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
172e0 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
172f0 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
17300 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
17310 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
17320 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
17330 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
17340 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
17350 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
17360 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
17370 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
17380 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
17390 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
173a0 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
173b0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
173c0 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
173d0 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
173e0 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
173f0 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  B,.** or TK_STRI
17400 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
17410 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
17420 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
17430 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
17440 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17450 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
17460 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
17470 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
17480 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72  tains the.** var
17490 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
174a0 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
174b0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
174c0 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
174d0 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
174e0 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
174f0 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
17500 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
17510 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
17520 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
17530 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
17540 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
17550 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
17560 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
17570 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
17580 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
17590 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
175a0 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
175b0 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
175c0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
175d0 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
175e0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
175f0 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
17600 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
17610 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
17620 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
17630 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
17640 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
17650 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
17660 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
17670 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
17680 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
17690 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
176a0 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
176b0 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
176c0 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
176d0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
176e0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
176f0 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
17700 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
17710 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a  s.** valid..**.*
17720 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
17730 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
17740 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
17750 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
17760 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
17770 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
17780 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
17790 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
177a0 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
177b0 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
177c0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
177d0 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
177e0 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
177f0 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
17800 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
17810 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
17820 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
17830 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
17840 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
17850 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
17860 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
17870 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
17880 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
17890 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
178a0 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
178b0 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
178c0 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
178d0 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
178e0 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
178f0 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
17900 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
17910 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
17920 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
17930 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
17940 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61  tion mark.** cha
17950 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
17960 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
17970 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
17980 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
17990 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66  ndex.** number f
179a0 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  or that variable
179b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
179c0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
179d0 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70  ubquery then Exp
179e0 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  r.iColumn holds 
179f0 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65  an integer.** re
17a00 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f  gister number co
17a10 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73  ntaining the res
17a20 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75  ult of the subqu
17a30 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ery.  If the.** 
17a40 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61  subquery gives a
17a50 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74   constant result
17a60 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  , then iTable is
17a70 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62   -1.  If the sub
17a80 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61  query.** gives a
17a90 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65   different answe
17aa0 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74  r at different t
17ab0 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74  imes during stat
17ac0 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  ement processing
17ad0 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20  .** then iTable 
17ae0 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  is the address o
17af0 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74  f a subroutine t
17b00 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65  hat computes the
17b10 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a   subquery..**.**
17b20 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20   If the Expr is 
17b30 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d  of type OP_Colum
17b40 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  n, and the table
17b50 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67   it is selecting
17b60 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69   from.** is a di
17b70 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20  sk table or the 
17b80 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74  "old.*" pseudo-t
17b90 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20  able, then pTab 
17ba0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
17bb0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
17bc0 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e  able definition.
17bd0 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f  .**.** ALLOCATIO
17be0 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45  N NOTES:.**.** E
17bf0 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20  xpr objects can 
17c00 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d  use a lot of mem
17c10 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74  ory space in dat
17c20 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54  abase schema.  T
17c30 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65  o.** help reduce
17c40 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d   memory requirem
17c50 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20  ents, sometimes 
17c60 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77  an Expr object w
17c70 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61  ill be.** trunca
17c80 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64  ted.  And to red
17c90 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
17ca0 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
17cb0 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a  ions, sometimes.
17cc0 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  ** two or more E
17cd0 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c  xpr objects will
17ce0 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
17cf0 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  single memory al
17d00 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67  location,.** tog
17d10 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e  ether with Expr.
17d20 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a  zToken strings..
17d30 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f  **.** If the EP_
17d40 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54  Reduced and EP_T
17d50 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61  okenOnly flags a
17d60 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61  re set when.** a
17d70 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73  n Expr object is
17d80 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65   truncated.  Whe
17d90 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  n EP_Reduced is 
17da0 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a  set, then all.**
17db0 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20   the child Expr 
17dc0 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45  objects in the E
17dd0 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78  xpr.pLeft and Ex
17de0 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65  pr.pRight subtre
17df0 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69  es.** are contai
17e00 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73  ned within the s
17e10 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ame memory alloc
17e20 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f  ation.  Note, ho
17e30 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74  wever, that.** t
17e40 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45  he subtrees in E
17e50 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45  xpr.x.pList or E
17e60 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72  xpr.x.pSelect ar
17e70 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74  e always separat
17e80 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  ely.** allocated
17e90 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
17ea0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45  whether or not E
17eb0 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
17ec0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
17ed0 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
17ef0 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d  peration perform
17f00 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
17f10 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
17f20 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ty;         /* T
17f30 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74  he affinity of t
17f40 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69  he column or 0 i
17f50 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a  f not a column *
17f60 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
17f70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
17f80 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50  rious flags.  EP
17f90 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  _* See below */.
17fa0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
17fb0 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20  ar *zToken;     
17fc0 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61       /* Token va
17fd0 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e  lue. Zero termin
17fe0 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65  ated and dequote
17ff0 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61  d */.    int iVa
18000 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  lue;            
18010 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  /* Non-negative 
18020 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
18030 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a   EP_IntValue */.
18040 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20    } u;..  /* If 
18050 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
18060 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
18070 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
18080 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
18090 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
180a0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
180b0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
180c0 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
180d0 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
180e0 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
180f0 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
18100 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
18110 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
18120 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18130 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18150 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
18160 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
18170 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
18180 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
18190 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
181a0 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
181b0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
181c0 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
181d0 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c       /* op = IN,
181e0 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c   EXISTS, SELECT,
181f0 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c   CASE, FUNCTION,
18200 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20   BETWEEN */.    
18210 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
18220 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65       /* EP_xIsSe
18230 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e  lect and op = IN
18240 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
18250 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
18260 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
18270 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
18280 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
18290 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
182a0 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
182b0 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
182c0 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
182d0 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
182e0 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
182f0 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
18300 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
18310 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
18320 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
18330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18360 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
18370 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
18380 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
18390 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
183a0 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
183b0 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
183c0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
183d0 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
183e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
183f0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
18400 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
18410 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
18420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18430 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
18440 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
18450 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
18460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18470 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
18480 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
18490 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20   old.           
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
184b0 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31   EP_Unlikely:  1
184c0 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c  34217728 times l
184d0 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20  ikelihood.      
184e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184f0 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a     ** TK_SELECT:
18500 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f 66   1st register of
18510 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a   result vector *
18520 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
18530 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
18540 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
18550 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
18560 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18580 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
18590 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
185a0 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20  always >= 1)..  
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185c0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
185d0 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75  ECT_COLUMN: colu
185e0 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
185f0 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36   vector */.  i16
18600 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
18610 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
18620 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
18630 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
18640 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
18650 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
18660 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
18670 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
18680 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
18690 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
186a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
186b0 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
186c0 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
186d0 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
186f0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
18700 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
18710 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18730 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
18740 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
18750 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
18760 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
18770 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
18780 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
18790 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
187a0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
187b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
187c0 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
187d0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 43   expressions.  C
187e0 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20  an be NULL.     
187f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18800 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c      ** for a col
18810 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  umn of an index 
18820 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  on an expression
18830 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
18840 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
18850 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  the meanings of 
18860 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  bits in the Expr
18870 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
18880 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d  .#define EP_From
18890 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f  Join  0x000001 /
188a0 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20  * Originates in 
188b0 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20  ON/USING clause 
188c0 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  of outer join */
188d0 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
188e0 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f        0x000002 /
188f0 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
18900 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
18910 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
18920 65 66 69 6e 65 20 45 50 5f 48 61 73 46 75 6e 63  efine EP_HasFunc
18930 20 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 43     0x000004 /* C
18940 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
18950 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66  ore functions of
18960 20 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 20 20 20   any kind */.   
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18980 2a 20 30 78 30 30 30 30 30 38 20 2f 2f 20 61 76  * 0x000008 // av
18990 61 69 6c 61 62 6c 65 20 66 6f 72 20 75 73 65 20  ailable for use 
189a0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
189b0 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30  stinct  0x000010
189c0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
189d0 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54  nction with DIST
189e0 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  INCT keyword */.
189f0 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65  #define EP_VarSe
18a00 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a  lect 0x000020 /*
18a10 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72   pSelect is corr
18a20 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73  elated, not cons
18a30 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tant */.#define 
18a40 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30  EP_DblQuoted 0x0
18a50 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  00040 /* token.z
18a60 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
18a70 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
18a80 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
18a90 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75   0x000080 /* Tru
18aa0 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66  e for an infix f
18ab0 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47  unction: LIKE, G
18ac0 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66  LOB, etc */.#def
18ad0 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20  ine EP_Collate  
18ae0 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
18af0 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
18b00 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
18b10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47   */.#define EP_G
18b20 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30  eneric   0x00020
18b30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c  0 /* Ignore COLL
18b40 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20  ATE or affinity 
18b50 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a  on this tree */.
18b60 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
18b70 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a  lue  0x000400 /*
18b80 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
18b90 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
18ba0 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
18bb0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30  EP_xIsSelect 0x0
18bc0 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65  00800 /* x.pSele
18bd0 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
18be0 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
18bf0 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
18c00 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31  _Skip      0x001
18c10 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20  000 /* COLLATE, 
18c20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20  AS, or UNLIKELY 
18c30 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
18c40 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30  duced   0x002000
18c50 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
18c60 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
18c70 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
18c80 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
18c90 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20  nly 0x004000 /* 
18ca0 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
18cb0 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62  _TOKENONLYSIZE b
18cc0 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
18cd0 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20  fine EP_Static  
18ce0 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65    0x008000 /* He
18cf0 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74  ld in memory not
18d00 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
18d10 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69  alloc() */.#defi
18d20 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
18d30 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64  0x010000 /* Need
18d40 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65   to sqlite3DbFre
18d50 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  e() Expr.zToken 
18d60 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f  */.#define EP_No
18d70 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30  Reduce  0x020000
18d80 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
18d90 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
18da0 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  xpr */.#define E
18db0 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34  P_Unlikely  0x04
18dc0 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79  0000 /* unlikely
18dd0 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  () or likelihood
18de0 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
18df0 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46  define EP_ConstF
18e00 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20  unc 0x080000 /* 
18e10 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  A SQLITE_FUNC_CO
18e20 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48  NSTANT or _SLOCH
18e30 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  NG function */.#
18e40 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e  define EP_CanBeN
18e50 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20  ull 0x100000 /* 
18e60 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70  Can be null desp
18e70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  ite NOT NULL con
18e80 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
18e90 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20  ne EP_Subquery  
18ea0 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65  0x200000 /* Tree
18eb0 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53   contains a TK_S
18ec0 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a  ELECT operator *
18ed0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69  /.#define EP_Ali
18ee0 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30 20  as     0x400000 
18ef0 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66  /* Is an alias f
18f00 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20  or a result set 
18f10 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e  column */.#defin
18f20 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20 30  e EP_Leaf      0
18f30 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72 2e  x800000 /* Expr.
18f40 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c 20  pLeft, .pRight, 
18f50 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e  .u.pSelect all N
18f60 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ULL */../*.** Th
18f70 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 6d  e EP_Propagate m
18f80 61 73 6b 20 69 73 20 61 20 73 65 74 20 6f 66 20  ask is a set of 
18f90 70 72 6f 70 65 72 74 69 65 73 20 74 68 61 74 20  properties that 
18fa0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72  automatically pr
18fb0 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70 77 61 72  opagate.** upwar
18fc0 64 73 20 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e  ds into parent n
18fd0 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  odes..*/.#define
18fe0 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45   EP_Propagate (E
18ff0 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62  P_Collate|EP_Sub
19000 71 75 65 72 79 7c 45 50 5f 48 61 73 46 75 6e 63  query|EP_HasFunc
19010 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  )../*.** These m
19020 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
19030 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
19040 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
19050 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
19060 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
19070 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70  fine ExprHasProp
19080 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28  erty(E,P)     ((
19090 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21  (E)->flags&(P))!
190a0 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  =0).#define Expr
190b0 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45  HasAllProperty(E
190c0 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  ,P)  (((E)->flag
190d0 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
190e0 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70  fine ExprSetProp
190f0 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45  erty(E,P)     (E
19100 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  )->flags|=(P).#d
19110 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50  efine ExprClearP
19120 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28  roperty(E,P)   (
19130 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  E)->flags&=~(P).
19140 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56  ./* The ExprSetV
19150 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63  VAProperty() mac
19160 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ro is used for V
19170 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
19180 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20  idation,.** and 
19190 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e  Accreditation on
191a0 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69  ly.  It works li
191b0 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ke ExprSetProper
191c0 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a  ty() during VVA.
191d0 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74  ** processes but
191e0 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20   is a no-op for 
191f0 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66  delivery..*/.#if
19200 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
19210 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
19220 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
19230 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28  )  (E)->flags|=(
19240 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
19250 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
19260 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66  erty(E,P).#endif
19270 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
19280 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
19290 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
192a0 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f  required by a no
192b0 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72  rmal Expr.** str
192c0 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
192d0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
192e0 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
192f0 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a   in Expr.flags.*
19300 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74  * and an Expr st
19310 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
19320 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
19330 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
19340 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20  EXPR_FULLSIZE   
19350 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45          sizeof(E
19360 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f  xpr)           /
19370 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23  * Full size */.#
19380 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55  define EXPR_REDU
19390 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f  CEDSIZE        o
193a0 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61  ffsetof(Expr,iTa
193b0 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20  ble)  /* Common 
193c0 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66  features */.#def
193d0 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  ine EXPR_TOKENON
193e0 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73  LYSIZE      offs
193f0 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29  etof(Expr,pLeft)
19400 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74     /* Fewer feat
19410 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46  ures */../*.** F
19420 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74  lags passed to t
19430 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  he sqlite3ExprDu
19440 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65  p() function. Se
19450 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d  e the header com
19460 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ment.** above sq
19470 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
19480 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
19490 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
194a0 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
194b0 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
194c0 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
194d0 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
194e0 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
194f0 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
19500 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
19510 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
19520 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
19530 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
19540 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
19550 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
19560 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
19570 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
19580 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
19590 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
195a0 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
195b0 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
195c0 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
195d0 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
195e0 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
195f0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
19600 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
19610 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
19620 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
19630 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
19640 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
19650 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
19660 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
19670 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
19680 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
19690 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
196a0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
196b0 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
196c0 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
196d0 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
196e0 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
196f0 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
19700 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
19710 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
19720 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
19730 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
19740 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
19750 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
19760 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
19770 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
19780 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
19790 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
197a0 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
197b0 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
197c0 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
197d0 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
197e0 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
197f0 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
19800 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
19810 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
19820 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
19830 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
19840 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
19850 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
19860 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
19870 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
19880 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
19890 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
198a0 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
198b0 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
198c0 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
198d0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
198e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
198f0 54 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  The parse tree f
19900 6f 72 20 74 68 69 73 20 65 78 70 72 65 73 73 69  or this expressi
19910 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  on */.    char *
19920 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
19930 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
19940 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
19950 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
19960 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
19970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
19980 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
19990 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
199a0 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
199b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
199c0 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
199d0 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
199e0 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
199f0 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
19a00 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
19a10 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
19a20 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
19a30 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
19a40 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
19a50 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
19a60 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73  OLUMN */.    uns
19a70 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a  igned reusable :
19a80 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  1;   /* Constant
19a90 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72   expression is r
19aa0 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  eusable */.    u
19ab0 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72  nion {.      str
19ac0 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31  uct {.        u1
19ad0 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20  6 iOrderByCol;  
19ae0 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52      /* For ORDER
19af0 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   BY, column numb
19b00 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74  er in result set
19b10 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20   */.        u16 
19b20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  iAlias;         
19b30 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20    /* Index into 
19b40 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66  Parse.aAlias[] f
19b50 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  or zName */.    
19b60 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74    } x;.      int
19b70 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20   iConstExprReg; 
19b80 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
19b90 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20 76   in which Expr v
19ba0 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20 2a  alue is cached *
19bb0 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 61  /.    } u;.  } a
19bc0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
19bd0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 73 6c 6f        /* One slo
19be0 74 20 66 6f 72 20 65 61 63 68 20 65 78 70 72 65  t for each expre
19bf0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
19c00 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
19c10 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
19c20 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
19c30 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73  used by the pars
19c40 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74  er to record bot
19c50 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74  h.** the parse t
19c60 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65  ree for an expre
19c70 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70  ssion and the sp
19c80 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  an of input text
19c90 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65   for an.** expre
19ca0 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ssion..*/.struct
19cb0 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78   ExprSpan {.  Ex
19cc0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
19cd0 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
19ce0 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65  ssion parse tree
19cf0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
19d00 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46   *zStart;   /* F
19d10 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
19d20 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
19d30 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
19d40 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63  nd;     /* One c
19d50 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68  haracter past th
19d60 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74  e end of input t
19d70 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ext */.};../*.**
19d80 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
19d90 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
19da0 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
19db0 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
19dc0 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
19dd0 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
19de0 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
19df0 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
19e00 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
19e10 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
19e20 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
19e30 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
19e40 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
19e50 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
19e60 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
19e70 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
19e80 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
19e90 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
19ea0 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
19eb0 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
19ec0 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
19ed0 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
19ee0 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
19ef0 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
19f00 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
19f10 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
19f20 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
19f30 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
19f40 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
19f50 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
19f60 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
19f70 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
19f80 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
19f90 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
19fa0 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
19fb0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
19fc0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
19fd0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
19fe0 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
19ff0 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
1a000 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
1a010 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
1a020 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
1a030 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
1a040 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
1a050 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a060 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
1a070 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1a080 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d  ../*.** The bitm
1a090 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66  ask datatype def
1a0a0 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73  ined below is us
1a0b0 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f  ed for various o
1a0c0 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a  ptimizations..**
1a0d0 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69  .** Changing thi
1a0e0 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20  s from a 64-bit 
1a0f0 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65  to a 32-bit type
1a100 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62   limits the numb
1a110 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20  er of.** tables 
1a120 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20  in a join to 32 
1a130 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20  instead of 64.  
1a140 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75  But it also redu
1a150 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20  ces the size.** 
1a160 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62  of the library b
1a170 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69  y 738 bytes on i
1a180 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  x86..*/.#ifdef S
1a190 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
1a1a0 50 45 0a 20 20 74 79 70 65 64 65 66 20 53 51 4c  PE.  typedef SQL
1a1b0 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45  ITE_BITMASK_TYPE
1a1c0 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a   Bitmask;.#else.
1a1d0 20 20 74 79 70 65 64 65 66 20 75 36 34 20 42 69    typedef u64 Bi
1a1e0 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f  tmask;.#endif../
1a1f0 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
1a200 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74  of bits in a Bit
1a210 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61  mask.  "BMS" mea
1a220 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65  ns "BitMask Size
1a230 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d  "..*/.#define BM
1a240 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66  S  ((int)(sizeof
1a250 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f  (Bitmask)*8))../
1a260 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20  *.** A bit in a 
1a270 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69  Bitmask.*/.#defi
1a280 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20  ne MASKBIT(n)   
1a290 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28  (((Bitmask)1)<<(
1a2a0 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  n)).#define MASK
1a2b0 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69  BIT32(n) (((unsi
1a2c0 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29  gned int)1)<<(n)
1a2d0 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42 49 54  ).#define ALLBIT
1a2e0 53 20 20 20 20 20 20 28 28 42 69 74 6d 61 73 6b  S      ((Bitmask
1a2f0 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  )-1)../*.** The 
1a300 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1a310 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68  ure describes th
1a320 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
1a330 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1a340 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62  ent..** Each tab
1a350 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
1a360 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
1a370 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20  e is a separate 
1a380 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68  element of.** th
1a390 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72  e SrcList.a[] ar
1a3a0 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20  ray..**.** With 
1a3b0 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20  the addition of 
1a3c0 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
1a3d0 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66  e support, the f
1a3e0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1a3f0 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62  re.** can also b
1a400 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69  e used to descri
1a410 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  be a particular 
1a420 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68  table such as th
1a430 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20  e table that.** 
1a440 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61  is modified by a
1a450 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
1a460 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  , or UPDATE stat
1a470 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64  ement.  In stand
1a480 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68  ard SQL,.** such
1a490 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65   a table must be
1a4a0 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20   a simple name: 
1a4b0 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69  ID.  But in SQLi
1a4c0 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61  te, the table ca
1a4d0 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e  n.** now be iden
1a4e0 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61  tified by a data
1a4f0 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74  base name, a dot
1a500 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
1a510 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a   name: ID.ID..**
1a520 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65  .** The jointype
1a530 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77   starts out show
1a540 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70  ing the join typ
1a550 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75  e between the cu
1a560 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61  rrent table.** a
1a570 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c  nd the next tabl
1a580 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20  e on the list.  
1a590 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64  The parser build
1a5a0 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20  s the list this 
1a5b0 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69  way..** But sqli
1a5c0 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
1a5d0 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20  oinType() later 
1a5e0 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74  shifts the joint
1a5f0 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63  ypes so that eac
1a600 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78  h.** jointype ex
1a610 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e  presses the join
1a620 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62   between the tab
1a630 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
1a640 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ous table..**.**
1a650 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20   In the colUsed 
1a660 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d  field, the high-
1a670 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36  order bit (bit 6
1a680 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65  3) is set if the
1a690 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69   table.** contai
1a6a0 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20  ns more than 63 
1a6b0 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20  columns and the 
1a6c0 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63  64-th or later c
1a6d0 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a  olumn is used..*
1a6e0 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  /.struct SrcList
1a6f0 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20   {.  int nSrc;  
1a700 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a710 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  of tables or sub
1a720 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46  queries in the F
1a730 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1a740 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  u32 nAlloc;     
1a750 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
1a760 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20  tries allocated 
1a770 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a  in a[] below */.
1a780 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74    struct SrcList
1a790 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65  _item {.    Sche
1a7a0 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a  ma *pSchema;  /*
1a7b0 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68   Schema to which
1a7c0 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69   this item is fi
1a7d0 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  xed */.    char 
1a7e0 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20  *zDatabase;  /* 
1a7f0 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
1a800 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61   holding this ta
1a810 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
1a820 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
1a830 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
1a840 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
1a850 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68  Alias;     /* Th
1a860 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20  e "B" part of a 
1a870 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e  "A AS B" phrase.
1a880 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22    zName is the "
1a890 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  A" */.    Table 
1a8a0 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41  *pTab;      /* A
1a8b0 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72  n SQL table corr
1a8c0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61  esponding to zNa
1a8d0 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  me */.    Select
1a8e0 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41   *pSelect;  /* A
1a8f0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1a900 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20  t used in place 
1a910 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  of a table name 
1a920 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46  */.    int addrF
1a930 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72  illSub;  /* Addr
1a940 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e  ess of subroutin
1a950 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20  e to manifest a 
1a960 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20  subquery */.    
1a970 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20  int regReturn;  
1a980 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1a990 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64  lding return add
1a9a0 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c  ress of addrFill
1a9b0 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  Sub */.    int r
1a9c0 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20  egResult;    /* 
1a9d0 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  Registers holdin
1a9e0 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63  g results of a c
1a9f0 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
1aa00 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
1aa10 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
1aa20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
1aa30 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 74  n between this t
1aa40 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
1aa50 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75  vious */.      u
1aa60 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78  nsigned notIndex
1aa70 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  ed :1;    /* Tru
1aa80 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20  e if there is a 
1aa90 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
1aaa0 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  se */.      unsi
1aab0 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42 79  gned isIndexedBy
1aac0 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69   :1;   /* True i
1aad0 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e  f there is an IN
1aae0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
1aaf0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1ab00 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20  d isTabFunc :1; 
1ab10 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
1ab20 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63  able-valued-func
1ab30 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20  tion syntax */. 
1ab40 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1ab50 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20  Correlated :1;  
1ab60 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71  /* True if sub-q
1ab70 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74  uery is correlat
1ab80 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ed */.      unsi
1ab90 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
1aba0 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
1abb0 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
1abc0 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75  utine */.      u
1abd0 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73  nsigned isRecurs
1abe0 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  ive :1;   /* Tru
1abf0 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20  e for recursive 
1ac00 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54  reference in WIT
1ac10 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23  H */.    } fg;.#
1ac20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1ac30 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75  IT_EXPLAIN.    u
1ac40 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  8 iSelectId;    
1ac50 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d   /* If pSelect!=
1ac60 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65  0, the id of the
1ac70 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45   sub-select in E
1ac80 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20  QP */.#endif.   
1ac90 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
1aca0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
1acb0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
1acc0 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
1acd0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
1ace0 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
1acf0 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
1ad00 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
1ad10 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
1ad20 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
1ad30 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1ad40 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
1ad50 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
1ad60 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
1ad70 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54  f column N of pT
1ad80 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
1ad90 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
1ada0 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79  char *zIndexedBy
1adb0 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  ;    /* Identifi
1adc0 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
1add0 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
1ade0 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78  ause */.      Ex
1adf0 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67  prList *pFuncArg
1ae00 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20  ;  /* Arguments 
1ae10 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  to table-valued-
1ae20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
1ae30 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20  } u1;.    Index 
1ae40 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49  *pIBIndex;  /* I
1ae50 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
1ae60 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1ae70 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f  u1.zIndexedBy */
1ae80 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
1ae90 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
1aea0 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
1aeb0 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
1aec0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1aed0 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
1aee0 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
1aef0 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
1af00 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
1af10 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
1af20 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
1af30 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
1af40 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
1af50 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
1af60 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
1af70 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
1af80 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
1af90 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
1afa0 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
1afb0 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
1afc0 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
1afd0 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
1afe0 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
1aff0 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
1b000 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1b010 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
1b020 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
1b030 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
1b040 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
1b050 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
1b060 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
1b070 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
1b080 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
1b090 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
1b0a0 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
1b0b0 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
1b0c0 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  e */.../*.** Fla
1b0d0 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
1b0e0 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
1b0f0 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
1b100 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
1b110 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
1b120 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
1b130 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a  gs member..**.**
1b140 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1b150 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
1b160 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
1b170 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d     WHERE_USE_LIM
1b180 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c  IT  == SF_FixedL
1b190 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  imit.*/.#define 
1b1a0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
1b1b0 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
1b1c0 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
1b1d0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1b1e0 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
1b1f0 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
1b200 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
1b210 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1b220 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
1b230 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
1b240 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
1b250 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
1b260 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1b270 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
1b280 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
1b290 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
1b2a0 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
1b2b0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
1b2c0 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ERE_ONEPASS_MULT
1b2d0 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f  IROW 0x0008 /* O
1b2e0 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74  NEPASS is ok wit
1b2f0 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1b300 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b310 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20  _DUPLICATES_OK  
1b320 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74    0x0010 /* Ok t
1b330 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d  o return a row m
1b340 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f  ore than once */
1b350 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1b360 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20 20 20  R_SUBCLAUSE     
1b370 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73  0x0020 /* Proces
1b380 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45  sing a sub-WHERE
1b390 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20   as part of.    
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3c0 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69    ** the OR opti
1b3d0 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65  mization  */.#de
1b3e0 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50  fine WHERE_GROUP
1b3f0 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30 30  BY          0x00
1b400 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69  40 /* pOrderBy i
1b410 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50  s really a GROUP
1b420 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57   BY */.#define W
1b430 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20  HERE_DISTINCTBY 
1b440 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20        0x0080 /* 
1b450 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c  pOrderby is real
1b460 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c  ly a DISTINCT cl
1b470 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1b480 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49  WHERE_WANT_DISTI
1b490 4e 43 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a  NCT    0x0100 /*
1b4a0 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64   All output need
1b4b0 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74  s to be distinct
1b4c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b4d0 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20  E_SORTBYGROUP   
1b4e0 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70     0x0200 /* Sup
1b4f0 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72  port sqlite3Wher
1b500 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23  eIsSorted() */.#
1b510 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1b520 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30 78  K_TABLE       0x
1b530 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  0400 /* Do not d
1b540 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61  efer seeks on ma
1b550 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  in table */.#def
1b560 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1b570 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30  Y_LIMIT    0x080
1b580 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d  0 /* ORDERBY+LIM
1b590 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20  IT on the inner 
1b5a0 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  loop */.#define 
1b5b0 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f  WHERE_SEEK_UNIQ_
1b5c0 54 41 42 4c 45 20 20 30 78 31 30 30 30 20 2f 2a  TABLE  0x1000 /*
1b5d0 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65   Do not defer se
1b5e0 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20 2a 2f  eks if unique */
1b5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b600 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1b610 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x2000    not cu
1b620 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1b630 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53  #define WHERE_US
1b640 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30  E_LIMIT        0
1b650 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65  x4000 /* Use the
1b660 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65   LIMIT in cost e
1b670 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20  stimates */.    
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b690 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30      /*     0x800
1b6a0 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1b6b0 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41  ly used */../* A
1b6c0 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
1b6d0 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
1b6e0 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
1b6f0 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
1b700 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
1b710 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
1b720 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
1b730 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
1b740 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1b750 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
1b760 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
1b770 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b780 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
1b790 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
1b7a0 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
1b7b0 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
1b7c0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1b7d0 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
1b7e0 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
1b7f0 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
1b800 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
1b810 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
1b820 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
1b830 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
1b840 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
1b850 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
1b860 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
1b870 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
1b880 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
1b890 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
1b8a0 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1b8b0 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
1b8c0 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1b8d0 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
1b8e0 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
1b8f0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1b900 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1b910 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
1b920 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
1b930 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
1b940 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
1b950 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
1b960 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
1b970 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
1b980 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
1b990 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
1b9a0 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
1b9b0 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
1b9c0 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
1b9d0 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
1b9e0 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
1b9f0 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
1ba00 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  most.** context 
1ba10 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73  is searched firs
1ba20 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20  t.  If no match 
1ba30 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65  is found, the ne
1ba40 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74  xt outer.** cont
1ba50 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20  ext is checked. 
1ba60 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69   If there is sti
1ba70 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65  ll no match, the
1ba80 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a   next context.**
1ba90 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68   is checked.  Th
1baa0 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69  is process conti
1bab0 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65  nues until eithe
1bac0 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  r a match is fou
1bad0 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e  nd.** or all con
1bae0 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e  texts are check.
1baf0 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69    When a match i
1bb00 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65  s found, the nRe
1bb10 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  f member of.** t
1bb20 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  he context conta
1bb30 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20  ining the match 
1bb40 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
1bb50 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
1bb60 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
1bb70 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
1bb80 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
1bb90 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
1bba0 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
1bbb0 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
1bbc0 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
1bbd0 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
1bbe0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1bbf0 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
1bc00 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
1bc10 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
1bc20 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
1bc30 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
1bc40 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
1bc50 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
1bc60 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
1bc70 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
1bc80 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
1bc90 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
1bca0 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
1bcb0 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
1bcc0 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
1bcd0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
1bce0 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
1bcf0 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73  onal list of res
1bd00 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult-set columns 
1bd10 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
1bd20 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66  ggInfo;   /* Inf
1bd30 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
1bd40 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69  ggregates at thi
1bd50 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d  s level */.  Nam
1bd60 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b  eContext *pNext;
1bd70 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20    /* Next outer 
1bd80 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e  name context.  N
1bd90 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73  ULL for outermos
1bda0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  t */.  int nRef;
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1bdc0 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72  umber of names r
1bdd0 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20  esolved by this 
1bde0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74  context */.  int
1bdf0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
1be00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1be10 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65  rrors encountere
1be20 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e  d while resolvin
1be30 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36  g names */.  u16
1be40 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20   ncFlags;       
1be50 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72    /* Zero or mor
1be60 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66  e NC_* flags def
1be70 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ined below */.};
1be80 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1be90 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e  values for the N
1bea0 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c  ameContext, ncFl
1beb0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
1bec0 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1bed0 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20  ts (all checked 
1bee0 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
1bef0 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20  *    NC_HasAgg  
1bf00 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a    == SF_HasAgg.*
1bf10 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  *    NC_MinMaxAg
1bf20 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67  g == SF_MinMaxAg
1bf30 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43  g == SQLITE_FUNC
1bf40 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64  _MINMAX.**.*/.#d
1bf50 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67  efine NC_AllowAg
1bf60 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67  g  0x0001  /* Ag
1bf70 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1bf80 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65  s are allowed he
1bf90 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  re */.#define NC
1bfa0 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30 30  _PartIdx   0x000
1bfb0 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  2  /* True if re
1bfc0 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61  solving a partia
1bfd0 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f  l index WHERE */
1bfe0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68  .#define NC_IsCh
1bff0 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a  eck   0x0004  /*
1c000 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1c010 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48  ng names in a CH
1c020 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ECK constraint *
1c030 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41  /.#define NC_InA
1c040 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f  ggFunc 0x0008  /
1c050 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a  * True if analyz
1c060 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ing arguments to
1c070 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a   an agg func */.
1c080 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67  #define NC_HasAg
1c090 67 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  g    0x0010  /* 
1c0a0 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  One or more aggr
1c0b0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
1c0c0 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1c0d0 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30  NC_IdxExpr   0x0
1c0e0 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  020  /* True if 
1c0f0 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e  resolving column
1c100 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45  s of CREATE INDE
1c110 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  X */.#define NC_
1c120 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 34 30  VarSelect 0x0040
1c130 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74 65    /* A correlate
1c140 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20 62  d subquery has b
1c150 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  een seen */.#def
1c160 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ine NC_MinMaxAgg
1c170 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f   0x1000  /* min/
1c180 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73  max aggregates s
1c190 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61  een.  See note a
1c1a0 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
1c1b0 4e 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78 32  NC_Complex   0x2
1c1c0 30 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  000  /* True if 
1c1d0 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73 75  a function or su
1c1e0 62 71 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a 0a  bquery seen */..
1c1f0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1c200 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1c210 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1c220 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
1c230 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
1c240 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
1c250 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
1c260 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1c270 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
1c280 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
1c290 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
1c2a0 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
1c2b0 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
1c2c0 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
1c2d0 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
1c2e0 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
1c2f0 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
1c300 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
1c310 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
1c320 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
1c330 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
1c340 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
1c350 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
1c360 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
1c370 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
1c380 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
1c390 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
1c3a0 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
1c3b0 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
1c3c0 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
1c3d0 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
1c3e0 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
1c3f0 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
1c400 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
1c410 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
1c420 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
1c430 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
1c440 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
1c450 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
1c460 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
1c470 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
1c480 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
1c490 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
1c4a0 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
1c4b0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1c4c0 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
1c4d0 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
1c4e0 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
1c4f0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
1c500 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
1c510 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
1c520 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
1c530 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
1c540 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
1c550 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
1c560 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
1c570 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
1c580 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
1c590 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
1c5a0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
1c5b0 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
1c5c0 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
1c5d0 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
1c5e0 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
1c5f0 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
1c600 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
1c610 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1c620 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
1c630 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
1c640 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
1c650 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
1c660 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
1c670 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1c680 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
1c690 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
1c6a0 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
1c6b0 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  CEPT */.  LogEst
1c6c0 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20   nSelectRow;    
1c6d0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75   /* Estimated nu
1c6e0 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72  mber of result r
1c6f0 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c  ows */.  u32 sel
1c700 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
1c710 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
1c720 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
1c730 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
1c740 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
1c750 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
1c760 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
1c770 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45  unters */.#if SE
1c780 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
1c790 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d  D.  char zSelNam
1c7a0 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79  e[12];     /* Sy
1c7b0 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74  mbolic name of t
1c7c0 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66  his SELECT use f
1c7d0 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a  or debugging */.
1c7e0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64  #endif.  int add
1c7f0 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20  rOpenEphm[2];   
1c800 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
1c810 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
1c820 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
1c830 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
1c840 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
1c850 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
1c860 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
1c870 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1c880 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
1c890 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
1c8a0 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
1c8b0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
1c8c0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
1c8d0 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
1c8e0 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
1c8f0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1c900 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
1c910 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
1c920 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
1c930 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
1c940 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
1c950 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
1c960 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
1c970 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
1c980 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
1c990 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
1c9a0 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
1c9b0 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
1c9c0 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
1c9d0 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
1c9e0 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
1c9f0 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
1ca00 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
1ca10 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63         /* WITH c
1ca20 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74  lause attached t
1ca30 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f  o this select. O
1ca40 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  r NULL. */.};../
1ca50 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
1ca60 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73  ues for Select.s
1ca70 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53  elFlags.  The "S
1ca80 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73  F" prefix stands
1ca90 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20   for.** "Select 
1caa0 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  Flag"..**.** Val
1cab0 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
1cac0 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20  all checked via 
1cad0 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20 20  assert()).**    
1cae0 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 3d   SF_HasAgg     =
1caf0 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20  = NC_HasAgg.**  
1cb00 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20     SF_MinMaxAgg 
1cb10 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67   == NC_MinMaxAgg
1cb20 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46       == SQLITE_F
1cb30 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20  UNC_MINMAX.**   
1cb40 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20    SF_FixedLimit 
1cb50 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  == WHERE_USE_LIM
1cb60 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  IT.*/.#define SF
1cb70 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
1cb80 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70  0x00001  /* Outp
1cb90 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
1cba0 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
1cbb0 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20   SF_All         
1cbc0 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49     0x00002  /* I
1cbd0 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20  ncludes the ALL 
1cbe0 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
1cbf0 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20  ne SF_Resolved  
1cc00 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a       0x00004  /*
1cc10 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76   Identifiers hav
1cc20 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
1cc30 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67  */.#define SF_Ag
1cc40 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78 30  gregate      0x0
1cc50 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0008  /* Contain
1cc60 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73 20  s agg functions 
1cc70 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  or a GROUP BY */
1cc80 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 41  .#define SF_HasA
1cc90 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30 30  gg         0x000
1cca0 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  10  /* Contains 
1ccb0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1ccc0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
1ccd0 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
1cce0 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73 65   0x00020  /* Use
1ccf0 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
1cd00 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
1cd10 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
1cd20 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30 20  d       0x00040 
1cd30 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
1cd40 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
1cd50 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
1cd60 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
1cd70 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20 2f  fo    0x00080  /
1cd80 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
1cd90 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
1cda0 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
1cdb0 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20   SF_Compound    
1cdc0 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20 50     0x00100  /* P
1cdd0 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e  art of a compoun
1cde0 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69  d query */.#defi
1cdf0 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20  ne SF_Values    
1ce00 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f 2a       0x00200  /*
1ce10 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f   Synthesized fro
1ce20 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  m VALUES clause 
1ce30 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75  */.#define SF_Mu
1ce40 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78 30  ltiValue     0x0
1ce50 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20  0400  /* Single 
1ce60 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68  VALUES term with
1ce70 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1ce80 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
1ce90 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30  tedFrom     0x00
1cea0 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  800  /* Part of 
1ceb0 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
1cec0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23  FROM clause */.#
1ced0 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78  define SF_MinMax
1cee0 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30 30  Agg      0x01000
1cef0 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63    /* Aggregate c
1cf00 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20  ontaining min() 
1cf10 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66  or max() */.#def
1cf20 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65  ine SF_Recursive
1cf30 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20 2f        0x02000  /
1cf40 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20  * The recursive 
1cf50 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73  part of a recurs
1cf60 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69  ive CTE */.#defi
1cf70 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74  ne SF_FixedLimit
1cf80 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a       0x04000  /*
1cf90 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20   nSelectRow set 
1cfa0 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49  by a constant LI
1cfb0 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT */.#define S
1cfc0 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20  F_MaybeConvert  
1cfd0 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65 65   0x08000  /* Nee
1cfe0 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  d convertCompoun
1cff0 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1d000 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1d010 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20  F_Converted     
1d020 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79 20   0x10000  /* By 
1d030 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1d040 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1d050 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1d060 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30  IncludeHidden  0
1d070 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75  x20000  /* Inclu
1d080 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  de hidden column
1d090 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 23  s in output */.#
1d0a0 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c 65  define SF_Comple
1d0b0 78 52 65 73 75 6c 74 20 20 30 78 34 30 30 30 30  xResult  0x40000
1d0c0 20 20 2f 2a 20 52 65 73 75 6c 74 20 73 65 74 20    /* Result set 
1d0d0 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75 65 72  contains subquer
1d0e0 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  y or function */
1d0f0 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  .../*.** The res
1d100 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54  ults of a SELECT
1d110 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
1d120 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
1d130 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a  ays, as defined.
1d140 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ** by one of the
1d150 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1d160 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72  s.  The "SRT" pr
1d170 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45  efix means "SELE
1d180 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70  CT Result.** Typ
1d190 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  e"..**.**     SR
1d1a0 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74  T_Union       St
1d1b0 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61  ore results as a
1d1c0 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72   key in a tempor
1d1d0 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20  ary index.**    
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1f0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70   identified by p
1d200 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1d210 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63  *.**     SRT_Exc
1d220 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20  ept      Remove 
1d230 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65  results from the
1d240 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
1d250 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1d260 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1d270 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65  xists      Store
1d280 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63   a 1 in memory c
1d290 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ell pDest->iSDPa
1d2a0 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  rm if the result
1d2b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d2c0 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e          set is n
1d2d0 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  ot empty..**.** 
1d2e0 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20      SRT_Discard 
1d2f0 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65      Throw the re
1d300 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69  sults away.  Thi
1d310 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c  s is used by SEL
1d320 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ECT.**          
1d330 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
1d340 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
1d350 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79  ggers whose only
1d360 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20   purpose is.**  
1d370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d380 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65     the side-effe
1d390 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73  cts of functions
1d3a0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
1d3b0 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65  he above are fre
1d3c0 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69  e to ignore thei
1d3d0 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  r ORDER BY claus
1d3e0 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a  e. Those that.**
1d3f0 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e   follow must hon
1d400 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1d410 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1d420 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20    SRT_Output    
1d430 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77    Generate a row
1d440 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e   of output (usin
1d450 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52  g the OP_ResultR
1d460 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
1d470 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65            opcode
1d480 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  ) for each row i
1d490 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
1d4a0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1d4b0 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79  Mem         Only
1d4c0 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65   valid if the re
1d4d0 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65  sult is a single
1d4e0 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20   column..**     
1d4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d500 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  Store the first 
1d510 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69  column of the fi
1d520 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a  rst result row.*
1d530 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d540 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65        in registe
1d550 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
1d560 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68   then abandon th
1d570 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20  e rest.**       
1d580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1d590 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69   the query.  Thi
1d5a0 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d  s destination im
1d5b0 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e  plies "LIMIT 1".
1d5c0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53  .**.**     SRT_S
1d5d0 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72  et         The r
1d5e0 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20  esult must be a 
1d5f0 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20  single column.  
1d600 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20  Store each.**   
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d620 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20    row of result 
1d630 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61  as the key in ta
1d640 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1d650 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  rm..**          
1d660 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79             Apply
1d670 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44   the affinity pD
1d680 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66  est->affSdst bef
1d690 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20  ore storing.**  
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6b0 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65     results.  Use
1d6c0 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22  d to implement "
1d6d0 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22  IN (SELECT ...)"
1d6e0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1d6f0 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61  EphemTab    Crea
1d700 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20  te an temporary 
1d710 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1d720 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a  Parm and store.*
1d730 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d740 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74        the result
1d750 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73   there. The curs
1d760 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20  or is left open 
1d770 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20  after.**        
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1d790 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73  urning.  This is
1d7a0 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
1d7b0 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20  except that.**  
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7d0 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74     this destinat
1d7e0 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e  ion uses OP_Open
1d7f0 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65  Ephemeral to cre
1d800 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ate.**          
1d810 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74             the t
1d820 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a  able first..**.*
1d830 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74  *     SRT_Corout
1d840 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61  ine   Generate a
1d850 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74   co-routine that
1d860 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72   returns a new r
1d870 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20  ow of.**        
1d880 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
1d890 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69  ults each time i
1d8a0 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54  t is invoked.  T
1d8b0 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a  he entry point.*
1d8c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d8d0 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d        of the co-
1d8e0 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65  routine is store
1d8f0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44  d in register pD
1d900 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20  est->iSDParm.** 
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d920 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75      and the resu
1d930 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64  lt row is stored
1d940 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74   in pDest->nDest
1d950 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20   registers.**   
1d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d970 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20    starting with 
1d980 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a  pDest->iSdst..**
1d990 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c  .**     SRT_Tabl
1d9a0 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1d9b0 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61  sults in tempora
1d9c0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1d9d0 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
1d9e0 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1d9f0 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
1da00 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74  _EphemTab except
1da10 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a   that the table.
1da20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1da30 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65         is assume
1da40 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20  d to already be 
1da50 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20  open.  SRT_Fifo 
1da60 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  has.**          
1da70 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61             the a
1da80 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72  dditional proper
1da90 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65  ty of being able
1daa0 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20   to ignore.**   
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dac0 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63    the ORDER BY c
1dad0 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  lause..**.**    
1dae0 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20   SRT_DistFifo   
1daf0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1db00 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61  n a temporary ta
1db10 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1db20 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  rm..**          
1db30 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61             But a
1db40 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72  lso use temporar
1db50 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1db60 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20  SDParm+1 as.**  
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db80 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61     a record of a
1db90 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73  ll prior results
1dba0 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20   and ignore any 
1dbb0 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20  duplicate.**    
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbd0 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61   rows.  Name mea
1dbe0 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46  ns:  "Distinct F
1dbf0 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ifo"..**.**     
1dc00 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20  SRT_Queue       
1dc10 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1dc20 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
1dc30 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28  pDest->iSDParm (
1dc40 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20  really.**       
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
1dc60 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64   index).  Append
1dc70 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62   a sequence numb
1dc80 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65  er so that all e
1dc90 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20  ntries.**       
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
1dcb0 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a  e distinct..**.*
1dcc0 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75  *     SRT_DistQu
1dcd0 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75  eue   Store resu
1dce0 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20  lts in priority 
1dcf0 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44  queue pDest->iSD
1dd00 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20  Parm only if.** 
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63      the same rec
1dd30 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65  ord has never be
1dd40 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65  en stored before
1dd50 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20  .  The.**       
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1dd70 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53  dex at pDest->iS
1dd80 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c  DParm+1 hold all
1dd90 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a   prior stores..*
1dda0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e  /.#define SRT_Un
1ddb0 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a  ion        1  /*
1ddc0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1ddd0 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
1dde0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1ddf0 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20  _Except       2 
1de00 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c   /* Remove resul
1de10 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69  t from a UNION i
1de20 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1de30 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
1de40 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69   3  /* Store 1 i
1de50 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1de60 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65  not empty */.#de
1de70 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64  fine SRT_Discard
1de80 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e        4  /* Do n
1de90 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75  ot save the resu
1dea0 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a  lts anywhere */.
1deb0 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f  #define SRT_Fifo
1dec0 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53           5  /* S
1ded0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
1dee0 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
1def0 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23  matic rowid */.#
1df00 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46  define SRT_DistF
1df10 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69  ifo     6  /* Li
1df20 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74  ke SRT_Fifo, but
1df30 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
1df40 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
1df50 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20  SRT_Queue       
1df60 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   7  /* Store res
1df70 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20  ult in an queue 
1df80 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1df90 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f  istQueue    8  /
1dfa0 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65  * Like SRT_Queue
1dfb0 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73  , but unique res
1dfc0 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a  ults only */../*
1dfd0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
1dfe0 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20  ause is ignored 
1dff0 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61  for all of the a
1e000 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
1e010 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79  IgnorableOrderby
1e020 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c  (X) ((X->eDest)<
1e030 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a  =SRT_DistQueue).
1e040 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74  .#define SRT_Out
1e050 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20  put       9  /* 
1e060 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20  Output each row 
1e070 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
1e080 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20  fine SRT_Mem    
1e090 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72       10  /* Stor
1e0a0 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65  e result in a me
1e0b0 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65  mory cell */.#de
1e0c0 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20  fine SRT_Set    
1e0d0 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72       11  /* Stor
1e0e0 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79  e results as key
1e0f0 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
1e100 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68  .#define SRT_Eph
1e110 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20  emTab    12  /* 
1e120 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74  Create transient
1e130 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c   tab and store l
1e140 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f  ike SRT_Table */
1e150 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72  .#define SRT_Cor
1e160 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20  outine   13  /* 
1e170 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c  Generate a singl
1e180 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  e row of result 
1e190 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54  */.#define SRT_T
1e1a0 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f  able       14  /
1e1b0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1e1c0 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
1e1d0 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
1e1e0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1e1f0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
1e200 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68  ect describes wh
1e210 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68  ere to put of th
1e220 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20  e results of.** 
1e230 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1e240 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  nt..*/.struct Se
1e250 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20  lectDest {.  u8 
1e260 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20  eDest;          
1e270 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70    /* How to disp
1e280 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ose of the resul
1e290 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a  ts.  On of SRT_*
1e2a0 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74   above. */.  int
1e2b0 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20   iSDParm;       
1e2c0 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
1e2d0 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
1e2e0 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
1e2f0 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
1e300 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1e310 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68  Base register wh
1e320 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  ere results are 
1e330 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
1e340 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   nSdst;         
1e350 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
1e360 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
1e370 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  ed */.  char *zA
1e380 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20  ffSdst;      /* 
1e390 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68  Affinity used wh
1e3a0 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65  en eDest==SRT_Se
1e3b0 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  t */.  ExprList 
1e3c0 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b  *pOrderBy;  /* K
1e3d0 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53  ey columns for S
1e3e0 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54  RT_Queue and SRT
1e3f0 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b  _DistQueue */.};
1e400 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63  ../*.** During c
1e410 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  ode generation o
1e420 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  f statements tha
1e430 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74  t do inserts int
1e440 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  o AUTOINCREMENT.
1e450 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66  ** tables, the f
1e460 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61  ollowing informa
1e470 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64  tion is attached
1e480 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e   to the Table.u.
1e490 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69  autoInc.p.** poi
1e4a0 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74  nter of each aut
1e4b0 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65  oincrement table
1e4c0 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20   to record some 
1e4d0 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  side information
1e4e0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64   that.** the cod
1e4f0 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64  e generator need
1e500 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b  s.  We have to k
1e510 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75  eep per-table au
1e520 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69  toincrement.** i
1e530 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61  nformation in ca
1e540 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64  se inserts are d
1e550 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67 67  one within trigg
1e560 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64  ers.  Triggers d
1e570 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c  o not.** normall
1e580 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  y coordinate the
1e590 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62  ir activities, b
1e5a0 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f  ut we do need to
1e5b0 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a   coordinate the.
1e5c0 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73  ** loading and s
1e5d0 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63  aving of autoinc
1e5e0 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69  rement informati
1e5f0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  on..*/.struct Au
1e600 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75  toincInfo {.  Au
1e610 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74  toincInfo *pNext
1e620 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f  ;   /* Next info
1e630 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74   block in a list
1e640 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a   of them all */.
1e650 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
1e660 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1e670 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b   this info block
1e680 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20   refers to */.  
1e690 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
1e6a0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1e6b0 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
1e6c0 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1e6d0 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e  ing pTab */.  in
1e6e0 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20  t regCtr;       
1e6f0 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65      /* Memory re
1e700 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74  gister holding t
1e710 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72  he rowid counter
1e720 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69   */.};../*.** Si
1e730 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ze of the column
1e740 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65   cache.*/.#ifnde
1e750 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  f SQLITE_N_COLCA
1e760 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  CHE.# define SQL
1e770 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31  ITE_N_COLCACHE 1
1e780 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1e790 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
1e7a0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1e7b0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1e7c0 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
1e7d0 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20  each.** trigger 
1e7e0 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65  that may be fire
1e7f0 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20  d while parsing 
1e800 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  an INSERT, UPDAT
1e810 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73  E or DELETE.** s
1e820 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75  tatement. All su
1e830 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73  ch objects are s
1e840 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e  tored in the lin
1e850 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
1e860 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69  at.** Parse.pTri
1e870 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65  ggerPrg and dele
1e880 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65  ted once stateme
1e890 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68  nt compilation h
1e8a0 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c  as been.** compl
1e8b0 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64  eted..**.** A Vd
1e8c0 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  be sub-program t
1e8d0 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
1e8e0 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e  he body and WHEN
1e8f0 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67   clause of trigg
1e900 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  er.** TriggerPrg
1e910 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d  .pTrigger, assum
1e920 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e  ing a default ON
1e930 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1e940 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72   of.** TriggerPr
1e950 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f  g.orconf, is sto
1e960 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67  red in the Trigg
1e970 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76  erPrg.pProgram v
1e980 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  ariable..** The 
1e990 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1e9a0 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e  g list never con
1e9b0 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65  tains two entrie
1e9c0 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a  s with the same.
1e9d0 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f  ** values for bo
1e9e0 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20  th pTrigger and 
1e9f0 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  orconf..**.** Th
1ea00 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
1ea10 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c  lmask[0] variabl
1ea20 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61  e is set to a ma
1ea30 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
1ea40 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20  mns.** accessed 
1ea50 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72  (or set to 0 for
1ea60 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20   triggers fired 
1ea70 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49  as a result of I
1ea80 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65  NSERT.** stateme
1ea90 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
1eaa0 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
1eab0 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
1eac0 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
1ead0 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
1eae0 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
1eaf0 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
1eb00 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1eb10 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
1eb20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
1eb30 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
1eb40 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
1eb50 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
1eb60 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
1eb70 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
1eb80 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
1eb90 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
1eba0 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
1ebb0 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
1ebc0 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
1ebd0 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
1ebe0 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
1ebf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1ec00 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1ec10 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
1ec20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
1ec30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
1ec40 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
1ec50 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
1ec60 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
1ec70 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
1ec80 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
1ec90 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
1eca0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
1ecb0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
1ecc0 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
1ecd0 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
1ece0 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53   char yDbMask[(S
1ecf0 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1ed00 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69  ED+9)/8];.# defi
1ed10 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1ed20 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f  I)    (((M)[(I)/
1ed30 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29  8]&(1<<((I)&7)))
1ed40 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1ed50 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1ed60 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69   memset((M),0,si
1ed70 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e  zeof(M)).# defin
1ed80 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
1ed90 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c       (M)[(I)/8]|
1eda0 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20  =(1<<((I)&7)).# 
1edb0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
1edc0 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65  Zero(M)   sqlite
1edd0 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
1ede0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1edf0 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73  kNonZero(M)   (s
1ee00 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
1ee10 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65  ero(M)==0).#else
1ee20 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
1ee30 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b  ned int yDbMask;
1ee40 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1ee50 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
1ee60 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29  M)&(((yDbMask)1)
1ee70 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65  <<(I)))!=0).# de
1ee80 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
1ee90 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20  M)      (M)=0.# 
1eea0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
1eeb0 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28  (M,I)     (M)|=(
1eec0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
1eed0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1eee0 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28  skAllZero(M)   (
1eef0 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  M)==0.# define D
1ef00 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
1ef10 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a    (M)!=0.#endif.
1ef20 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
1ef30 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
1ef40 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
1ef50 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
1ef60 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
1ef70 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
1ef80 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
1ef90 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
1efa0 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
1efb0 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
1efc0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
1efd0 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
1efe0 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
1eff0 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
1f000 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
1f010 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
1f020 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
1f030 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
1f040 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
1f050 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
1f060 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
1f070 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
1f080 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
1f090 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
1f0a0 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
1f0b0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
1f0c0 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
1f0d0 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
1f0e0 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
1f0f0 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
1f100 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
1f110 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
1f120 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20  shared-cache.** 
1f130 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
1f140 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73  ed (if sqlite3Ts
1f150 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  d()->useSharedDa
1f160 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65  ta is true). The
1f170 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  y are.** used to
1f180 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f   store the set o
1f190 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65  f table-locks re
1f1a0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74  quired by the st
1f1b0 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a  atement being.**
1f1c0 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74   compiled. Funct
1f1d0 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ion sqlite3Table
1f1e0 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74  Lock() is used t
1f1f0 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f  o add entries to
1f200 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f   the.** list..*/
1f210 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a  .struct Parse {.
1f220 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1f230 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61         /* The ma
1f240 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75  in database stru
1f250 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
1f260 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
1f270 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
1f280 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
1f290 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
1f2a0 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
1f2b0 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
1f2c0 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
1f2d0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
1f2e0 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
1f2f0 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
1f300 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61  on */.  u8 colNa
1f310 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20  mesSet;      /* 
1f320 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f  TRUE after OP_Co
1f330 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65  lumnName has bee
1f340 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62  n issued to pVdb
1f350 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53  e */.  u8 checkS
1f360 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43  chema;      /* C
1f370 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f  auses schema coo
1f380 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20  kie check after 
1f390 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
1f3a0 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20   nested;        
1f3b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f3c0 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
1f3d0 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20  the parser/code 
1f3e0 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75  generator */.  u
1f3f0 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
1f400 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f410 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1f420 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
1f430 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c  [] */.  u8 isMul
1f440 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20  tiWrite;     /* 
1f450 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
1f460 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73  t may modify/ins
1f470 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ert multiple row
1f480 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f  s */.  u8 mayAbo
1f490 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rt;         /* T
1f4a0 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
1f4b0 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42   may throw an AB
1f4c0 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f  ORT exception */
1f4d0 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e  .  u8 hasCompoun
1f4e0 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20  d;      /* Need 
1f4f0 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72  to invoke conver
1f500 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1f510 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20  oSubquery() */. 
1f520 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f   u8 okConstFacto
1f530 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66  r;    /* OK to f
1f540 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
1f550 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  nts */.  u8 disa
1f560 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a  bleLookaside; /*
1f570 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   Number of times
1f580 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62   lookaside has b
1f590 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a  een disabled */.
1f5a0 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20    u8 nColCache; 
1f5b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f5c0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
1f5d0 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20  ColCache[] */.  
1f5e0 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20  int nRangeReg;  
1f5f0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1f600 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65  the temporary re
1f610 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1f620 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b    int iRangeReg;
1f630 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1f640 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70  register in temp
1f650 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1f660 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  lock */.  int nE
1f670 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
1f680 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
1f690 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
1f6a0 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20   nTab;          
1f6b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1f6c0 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61  reviously alloca
1f6d0 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73  ted VDBE cursors
1f6e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
1f6f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f700 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
1f710 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72  ells used so far
1f720 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c   */.  int nOpAll
1f730 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  oc;        /* Nu
1f740 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c  mber of slots al
1f750 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
1f760 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
1f770 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20  szOpAlloc;      
1f780 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d   /* Bytes of mem
1f790 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61  ory space alloca
1f7a0 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
1f7b0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c  [] */.  int iSel
1f7c0 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20  fTab;        /* 
1f7d0 54 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64  Table associated
1f7e0 20 77 69 74 68 20 61 6e 20 69 6e 64 65 78 20 6f   with an index o
1f7f0 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65 67 61 74  n expr, or negat
1f800 69 76 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  ive.            
1f810 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 66             ** of
1f820 20 74 68 65 20 62 61 73 65 20 72 65 67 69 73 74   the base regist
1f830 65 72 20 64 75 72 69 6e 67 20 63 68 65 63 6b 2d  er during check-
1f840 63 6f 6e 73 74 72 61 69 6e 74 20 65 76 61 6c 20  constraint eval 
1f850 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c  */.  int iCacheL
1f860 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  evel;     /* Col
1f870 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e  Cache valid when
1f880 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65   aColCache[].iLe
1f890 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c  vel<=iCacheLevel
1f8a0 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1f8b0 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  Cnt;       /* Co
1f8c0 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65  unter used to ge
1f8d0 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65  nerate aColCache
1f8e0 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f  [].lru values */
1f8f0 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20  .  int nLabel;  
1f900 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f910 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64  r of labels used
1f920 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65   */.  int *aLabe
1f930 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70  l;         /* Sp
1f940 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
1f950 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72  labels */.  Expr
1f960 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72  List *pConstExpr
1f970 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70  ;/* Constant exp
1f980 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f  ressions */.  To
1f990 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61  ken constraintNa
1f9a0 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  me;/* Name of th
1f9b0 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72  e constraint cur
1f9c0 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72  rently being par
1f9d0 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  sed */.  yDbMask
1f9e0 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a   writeMask;   /*
1f9f0 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74   Start a write t
1fa00 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
1fa10 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ese databases */
1fa20 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69  .  yDbMask cooki
1fa30 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61  eMask;  /* Bitma
1fa40 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72  sk of schema ver
1fa50 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20  ified databases 
1fa60 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
1fa70 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
1fa80 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1fa90 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
1faa0 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
1fab0 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
1fac0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1fad0 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
1fae0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
1faf0 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
1fb00 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
1fb10 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
1fb20 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
1fb30 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
1fb40 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c  ogram */.#if SEL
1fb50 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
1fb60 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20  .  int nSelect; 
1fb70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1fb80 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74  r of SELECT stat
1fb90 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20  ements seen */. 
1fba0 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65   int nSelectInde
1fbb0 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72  nt;   /* How far
1fbc0 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43   to indent SELEC
1fbd0 54 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20  TTRACE() output 
1fbe0 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
1fbf0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
1fc00 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
1fc10 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
1fc20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1fc30 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
1fc40 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
1fc50 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
1fc60 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
1fc70 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
1fc80 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
1fc90 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
1fca0 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
1fcb0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
1fcc0 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
1fcd0 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  NT counters */. 
1fce0 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65   Parse *pTopleve
1fcf0 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73  l;    /* Parse s
1fd00 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69  tructure for mai
1fd10 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55  n program (or NU
1fd20 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  LL) */.  Table *
1fd30 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a  pTriggerTab;  /*
1fd40 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20   Table triggers 
1fd50 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
1fd60 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  for */.  int add
1fd70 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a  rCrTab;       /*
1fd80 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43   Address of OP_C
1fd90 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64  reateBtree opcod
1fda0 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c  e on CREATE TABL
1fdb0 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72  E */.  u32 nQuer
1fdc0 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45  yLoop;      /* E
1fdd0 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  st number of ite
1fde0 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65  rations of a que
1fdf0 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20  ry (10*log2(N)) 
1fe00 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b  */.  u32 oldmask
1fe10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1fe20 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1fe30 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1fe40 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20  .  u32 newmask; 
1fe50 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
1fe60 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
1fe70 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
1fe80 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20   u8 eTriggerOp; 
1fe90 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41        /* TK_UPDA
1fea0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72  TE, TK_INSERT or
1feb0 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20   TK_DELETE */.  
1fec0 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20  u8 eOrconf;     
1fed0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1fee0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
1fef0 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73  cy for trigger s
1ff00 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  teps */.  u8 dis
1ff10 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f  ableTriggers;  /
1ff20 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c  * True to disabl
1ff30 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20  e triggers */.. 
1ff40 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
1ff50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
1ff90 2a 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d  * Fields above m
1ffa0 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
1ffb0 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65  ed to zero.  The
1ffc0 20 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c   fields that fol
1ffd0 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74  low,.  ** down t
1ffe0 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  o the beginning 
1fff0 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65  of the recursive
20000 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74   section, do not
20010 20 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a   need to be.  **
20020 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20   initialized as 
20030 74 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74  they will be set
20040 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73   before being us
20050 65 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  ed.  The boundar
20060 79 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d  y is.  ** determ
20070 69 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66  ined by offsetof
20080 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65  (Parse,aColCache
20090 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  )..  ***********
200a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
200b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
200c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
200d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
200e0 0a 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43  ..  struct yColC
200f0 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69  ache {.    int i
20100 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
20110 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
20120 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69   number */.    i
20130 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  16 iColumn;     
20140 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
20150 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  lumn number */. 
20160 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20     u8 tempReg;  
20170 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67           /* iReg
20180 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73   is a temp regis
20190 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74  ter that needs t
201a0 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20  o be freed */.  
201b0 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
201c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69          /* Nesti
201d0 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  ng level */.    
201e0 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20  int iReg;       
201f0 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74        /* Reg wit
20200 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  h value of this 
20210 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20  column. 0 means 
20220 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  none. */.    int
20230 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20   lru;           
20240 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65     /* Least rece
20250 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20  ntly used entry 
20260 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  has the smallest
20270 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43   value */.  } aC
20280 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e  olCache[SQLITE_N
20290 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20  _COLCACHE];  /* 
202a0 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  One for each col
202b0 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20  umn cache entry 
202c0 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65  */.  int aTempRe
202d0 67 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  g[8];        /* 
202e0 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72  Holding area for
202f0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
20300 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  ters */.  Token 
20310 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20  sNameToken;     
20320 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20    /* Token with 
20330 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65  unqualified sche
20340 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a  ma object name *
20350 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /..  /**********
20360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20  **************. 
203a0 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e   ** Above is con
203b0 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65  stant between re
203c0 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77  cursions.  Below
203d0 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65   is reset before
203e0 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20   and after.  ** 
203f0 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20  each recursion. 
20400 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65   The boundary be
20410 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20  tween these two 
20420 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72  regions is deter
20430 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67  mined.  ** using
20440 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
20450 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74  sLastToken) so t
20460 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69  he sLastToken fi
20470 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a  eld must be the.
20480 20 20 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64    ** first field
20490 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76   in the recursiv
204a0 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  e region..  ****
204b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
204c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
204d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
204e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
204f0 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73  ****/..  Token s
20500 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
20510 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b   /* The last tok
20520 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79  en parsed */.  y
20530 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20  nVar nVar;      
20540 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20550 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
20560 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
20570 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
20580 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b  u8 iPkSortOrder;
20590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43            /* ASC
205a0 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54   or DESC for INT
205b0 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
205c0 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e   */.  u8 explain
205d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
205e0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45  /* True if the E
205f0 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66  XPLAIN flag is f
20600 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72  ound on the quer
20610 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
20620 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
20630 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61  TABLE.  u8 decla
20640 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20  reVtab;         
20650 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73    /* True if ins
20660 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  ide sqlite3_decl
20670 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20  are_vtab() */.  
20680 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20  int nVtabLock;  
20690 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
206a0 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
206b0 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
206c0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48  .#endif.  int nH
206d0 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
206e0 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
206f0 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
20700 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
20710 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
20720 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
20730 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74  IN.  int iSelect
20740 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
20750 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20  * ID of current 
20760 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41  select for EXPLA
20770 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69  IN output */.  i
20780 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64  nt iNextSelectId
20790 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
207a0 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63   available selec
207b0 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e  t ID for EXPLAIN
207c0 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
207d0 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73  f.  VList *pVLis
207e0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
207f0 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e   Mapping between
20800 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20   variable names 
20810 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20  and numbers */. 
20820 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
20830 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
20840 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
20850 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
20860 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73  are()) */.  cons
20870 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
20880 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
20890 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
208a0 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
208b0 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
208c0 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
208d0 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
208e0 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
208f0 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
20900 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
20910 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20  NewTrigger;     
20920 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72  /* Trigger under
20930 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20   construct by a 
20940 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a  CREATE TRIGGER *
20950 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
20960 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
20970 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
20980 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
20990 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66  callbacks */.#if
209a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
209b0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
209c0 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20  Token sArg;     
209d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
209e0 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20  plete text of a 
209f0 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20  module argument 
20a00 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
20a10 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f  tabLock;       /
20a20 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72  * Pointer to vir
20a30 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64  tual tables need
20a40 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23  ing locking */.#
20a50 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70  endif.  Table *p
20a60 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20  ZombieTab;      
20a70 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62    /* List of Tab
20a80 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65  le objects to de
20a90 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20  lete after code 
20aa0 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  gen */.  Trigger
20ab0 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67  Prg *pTriggerPrg
20ac0 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73  ;  /* Linked lis
20ad0 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67  t of coded trigg
20ae0 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ers */.  With *p
20af0 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
20b00 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49     /* Current WI
20b10 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
20b20 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  LL */.  With *pW
20b30 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20  ithToFree;      
20b40 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57    /* Free this W
20b50 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68  ITH object at th
20b60 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72  e end of the par
20b70 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  se */.};../*.** 
20b80 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65  Sizes and pointe
20b90 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61  rs of various pa
20ba0 72 74 73 20 6f 66 20 74 68 65 20 50 61 72 73 65  rts of the Parse
20bb0 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66   object..*/.#def
20bc0 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a  ine PARSE_HDR_SZ
20bd0 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
20be0 61 43 6f 6c 43 61 63 68 65 29 20 2f 2a 20 52 65  aColCache) /* Re
20bf0 63 75 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f  cursive part w/o
20c00 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65   aColCache*/.#de
20c10 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52  fine PARSE_RECUR
20c20 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50  SE_SZ offsetof(P
20c30 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29  arse,sLastToken)
20c40 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65      /* Recursive
20c50 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
20c60 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28   PARSE_TAIL_SZ (
20c70 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41  sizeof(Parse)-PA
20c80 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
20c90 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65  /* Non-recursive
20ca0 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
20cb0 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28   PARSE_TAIL(X) (
20cc0 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52  ((char*)(X))+PAR
20cd0 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20  SE_RECURSE_SZ)  
20ce0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61  /* Pointer to ta
20cf0 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  il */../*.** Ret
20d00 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72  urn true if curr
20d10 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20  ently inside an 
20d20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
20d30 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a  vtab() call..*/.
20d40 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
20d50 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
20d60 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
20d70 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73  LARE_VTAB 0.#els
20d80 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  e.  #define IN_D
20d90 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61  ECLARE_VTAB (pPa
20da0 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62  rse->declareVtab
20db0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
20dc0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
20dd0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
20de0 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65  ucture can be de
20df0 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63  clared on a stac
20e00 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  k and used.** to
20e10 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e   save the Parse.
20e20 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c  zAuthContext val
20e30 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ue so that it ca
20e40 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61  n be restored la
20e50 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ter..*/.struct A
20e60 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63  uthContext {.  c
20e70 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
20e80 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75  Context;   /* Pu
20e90 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41  t saved Parse.zA
20ea0 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20  uthContext here 
20eb0 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
20ec0 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
20ed0 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74   /* The Parse st
20ee0 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f  ructure */.};../
20ef0 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c  *.** Bitfield fl
20f00 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65  ags for P5 value
20f10 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f   in various opco
20f20 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  des..**.** Value
20f30 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
20f40 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
20f50 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c  t()):.**    OPFL
20f60 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
20f70 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  == SQLITE_FUNC_L
20f80 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c  ENGTH.**    OPFL
20f90 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
20fa0 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  == SQLITE_FUNC_T
20fb0 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c  YPEOF.**    OPFL
20fc0 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
20fd0 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  == BTREE_BULKLOA
20fe0 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  D.**    OPFLAG_S
20ff0 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42  EEKEQ       == B
21000 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20  TREE_SEEK_EQ.** 
21010 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c     OPFLAG_FORDEL
21020 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
21030 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20  FORDELETE.**    
21040 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
21050 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56  ION == BTREE_SAV
21060 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20  EPOSITION.**    
21070 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
21080 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58      == BTREE_AUX
21090 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e  DELETE.*/.#defin
210a0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
210b0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
210c0 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74  * OP_Insert: Set
210d0 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
210e0 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20  Change */.      
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21110 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50  * Also used in P
21120 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50  2 (not P5) of OP
21130 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69  _Delete */.#defi
21140 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20  ne OPFLAG_EPHEM 
21150 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
21160 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70  /* OP_Column: Ep
21170 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69  hemeral output i
21180 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  s ok */.#define 
21190 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
211a0 20 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20       0x20    /* 
211b0 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
211c0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
211d0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
211e0 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
211f0 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
21200 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
21210 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
21220 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
21230 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
21240 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
21250 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
21260 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21270 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
21280 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
21290 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
212a0 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
212b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
212c0 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20  AG_ISNOOP       
212d0 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44   0x40    /* OP_D
212e0 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75  elete does pre-u
212f0 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20  pdate-hook only 
21300 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21310 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
21320 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
21330 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
21340 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
21350 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
21360 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
21370 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
21380 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
21390 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
213a0 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
213b0 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
213c0 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
213d0 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
213e0 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
213f0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
21400 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
21410 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f   OP_Open** curso
21420 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f  r uses EQ seek o
21430 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
21440 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
21450 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f      0x08    /* O
21460 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73  P_Open should us
21470 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  e BTREE_FORDELET
21480 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
21490 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
214a0 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20    0x10    /* P2 
214b0 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
214c0 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
214d0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
214e0 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
214f0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
21500 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
21510 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
21520 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
21530 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30  AVEPOSITION  0x0
21540 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  2    /* OP_Delet
21550 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63  e/Insert: save c
21560 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65  ursor pos */.#de
21570 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44  fine OPFLAG_AUXD
21580 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20 20  ELETE     0x04  
21590 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20    /* OP_Delete: 
215a0 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54  index in a DELET
215b0 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  E op */../*. * E
215c0 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
215d0 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
215e0 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
215f0 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
21600 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
21610 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20   Trigger.. *. * 
21620 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
21630 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
21640 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
21650 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
21660 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
21670 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
21680 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
21690 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
216a0 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20  presents the. * 
216b0 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
216c0 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
216d0 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
216e0 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
216f0 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
21700 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
21710 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
21720 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
21730 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
21740 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
21750 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
21760 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
21770 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
21780 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
21790 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
217a0 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
217b0 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
217c0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
217d0 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
217e0 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
217f0 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
21800 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
21810 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
21820 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
21830 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
21840 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
21850 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
21860 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
21870 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
21880 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
21890 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
218a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
218b0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
218c0 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
218d0 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
218e0 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
218f0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
21900 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
21910 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
21920 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
21930 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
21940 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
21950 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
21960 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
21970 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
21980 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
21990 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
219a0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
219b0 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
219c0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
219d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
219e0 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
219f0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
21a00 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
21a10 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
21a20 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
21a30 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
21a40 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
21a50 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
21a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a70 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
21a80 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
21a90 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
21aa0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
21ab0 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
21ac0 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
21ad0 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
21ae0 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
21af0 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
21b00 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
21b10 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
21b20 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
21b30 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
21b40 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
21b50 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
21b60 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
21b70 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
21b80 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
21b90 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
21ba0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
21bb0 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
21bc0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
21bd0 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
21be0 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
21bf0 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
21c00 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
21c10 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  which..**.** If 
21c20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
21c30 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
21c40 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
21c50 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
21c60 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
21c70 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
21c80 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
21c90 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
21ca0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
21cb0 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
21cc0 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
21cd0 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
21ce0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
21cf0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
21d00 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
21d10 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
21d20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
21d30 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
21d40 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
21d50 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65  .. *. * Instance
21d60 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
21d70 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
21d80 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
21d90 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
21da0 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
21db0 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
21dc0 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
21dd0 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
21de0 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61  mber of the. * a
21df0 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74  ssociated struct
21e00 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63   Trigger instanc
21e10 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  e. The first ele
21e20 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b  ment of the link
21e30 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68  ed list is. * th
21e40 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20  e first step of 
21e50 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67  the trigger-prog
21e60 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ram.. *. * The "
21e70 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63  op" member indic
21e80 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69  ates whether thi
21e90 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c  s is a "DELETE",
21ea0 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41   "INSERT", "UPDA
21eb0 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43  TE" or. * "SELEC
21ec0 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  T" statement. Th
21ed0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
21ee0 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20  e other members 
21ef0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
21f00 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66   the. * value of
21f10 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73   "op" as follows
21f20 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  :. *. * (op == T
21f30 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63  K_INSERT). * orc
21f40 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73  onf    -> stores
21f50 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
21f60 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53   algorithm. * pS
21f70 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68  elect   -> If th
21f80 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
21f90 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
21fa0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
21fb0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
21fc0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
21fd0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
21fe0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
21ff0 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  t. Otherwise NUL
22000 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  L.. * zTarget   
22010 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
22020 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
22030 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a   insert into.. *
22040 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66   pExprList -> If
22050 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
22060 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55  RT INTO ... VALU
22070 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  ES ... statement
22080 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
22090 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
220a0 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  es values to be 
220b0 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77  inserted. Otherw
220c0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64  ise NULL.. * pId
220d0 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69  List   -> If thi
220e0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
220f0 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e  NTO ... (<column
22100 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20  -names>) VALUES 
22110 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .... *          
22120 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
22130 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
22140 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
22150 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
22160 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
22170 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
22180 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
22190 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
221a0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
221b0 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
221c0 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
221d0 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
221e0 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
221f0 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
22200 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
22210 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
22220 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
22230 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70   NULL.. *. * (op
22240 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20   == TK_UPDATE). 
22250 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
22260 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
22270 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64  the table to upd
22280 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  ate.. * pWhere  
22290 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
222a0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44  lause of the UPD
222b0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ATE statement if
222c0 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
222d0 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
222e0 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
222f0 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  L.. * pExprList 
22300 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65  -> A list of the
22310 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61   columns to upda
22320 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65  te and the expre
22330 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65  ssions to update
22340 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
22350 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71   them to. See sq
22360 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f  lite3Update() do
22370 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22  cumentation of "
22380 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20  pChanges". *    
22390 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
223a0 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63  nt.. *. */.struc
223b0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
223c0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
223d0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
223e0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
223f0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
22400 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
22410 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
22420 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
22430 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
22440 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
22450 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
22460 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
22470 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
22480 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
22490 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
224a0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  CT statement or 
224b0 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
224c0 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  TO SELECT ... */
224d0 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74  .  char *zTarget
224e0 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65  ;       /* Targe
224f0 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
22500 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
22510 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
22520 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
22530 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
22540 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
22550 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
22560 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
22570 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
22580 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20  use for UPDATE. 
22590 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
225a0 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
225b0 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
225c0 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65  SERT */.  Trigge
225d0 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
225e0 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
225f0 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
22600 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
22610 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
22620 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
22630 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
22640 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
22650 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
22660 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
22670 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
22680 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
22690 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
226a0 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
226b0 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
226c0 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
226d0 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
226e0 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74  * explicit..*/.t
226f0 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
22700 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
22710 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
22720 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
22730 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
22740 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
22750 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
22760 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
22770 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
22780 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
22790 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
227a0 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
227b0 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
227c0 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
227d0 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
227e0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
227f0 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
22800 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
22810 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
22820 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
22830 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
22840 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
22850 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
22860 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
22870 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
22880 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
22890 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
228a0 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
228b0 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
228c0 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
228d0 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
228e0 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
228f0 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
22900 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
22910 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
22920 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
22930 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
22940 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
22950 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74  nd..*/.struct St
22960 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74  rAccum {.  sqlit
22970 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
22980 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
22990 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
229a0 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
229b0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78   */.  char *zTex
229c0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  t;         /* Th
229d0 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74  e string collect
229e0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  ed so far */.  u
229f0 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  32  nAlloc;     
22a00 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
22a10 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
22a20 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75   in zText */.  u
22a30 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  32  mxAlloc;    
22a40 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
22a50 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f  llowed allocatio
22a60 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c  n.  0 for no mal
22a70 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75  loc usage */.  u
22a80 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20  32  nChar;      
22a90 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
22aa0 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66   the string so f
22ab0 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63  ar */.  u8   acc
22ac0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
22ad0 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f  STRACCUM_NOMEM o
22ae0 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  r STRACCUM_TOOBI
22af0 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e  G */.  u8   prin
22b00 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53  tfFlags;    /* S
22b10 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61  QLITE_PRINTF fla
22b20 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23  gs below */.};.#
22b30 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
22b40 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e  NOMEM   1.#defin
22b50 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  e STRACCUM_TOOBI
22b60 47 20 20 32 0a 23 64 65 66 69 6e 65 20 53 51 4c  G  2.#define SQL
22b70 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52  ITE_PRINTF_INTER
22b80 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74  NAL 0x01  /* Int
22b90 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63  ernal-use-only c
22ba0 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65  onverters allowe
22bb0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
22bc0 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55  ITE_PRINTF_SQLFU
22bd0 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c  NC  0x02  /* SQL
22be0 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
22bf0 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20  nts to VXPrintf 
22c00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
22c10 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
22c20 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20  D 0x04  /* True 
22c30 69 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f  if xText is allo
22c40 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a  cated space */..
22c50 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63  #define isMalloc
22c60 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72  ed(X)  (((X)->pr
22c70 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49  intfFlags & SQLI
22c80 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43  TE_PRINTF_MALLOC
22c90 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20  ED)!=0).../*.** 
22ca0 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
22cb0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
22cc0 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
22cd0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
22ce0 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
22cf0 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
22d00 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
22d10 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
22d20 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
22d30 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
22d40 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
22d50 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
22d60 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
22d70 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
22d80 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
22d90 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
22da0 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
22db0 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
22dc0 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
22dd0 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
22de0 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
22df0 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
22e00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
22e10 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
22e20 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
22e30 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
22e40 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
22e50 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
22e60 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
22e70 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
22e80 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
22e90 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
22ea0 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
22eb0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
22ec0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
22ed0 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
22ee0 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22f00 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
22f10 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
22f20 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
22f30 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
22f40 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
22f50 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
22f60 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
22f70 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22f90 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
22fa0 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
22fb0 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
22fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fd0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
22fe0 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
22ff0 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
23000 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
23010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23020 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
23030 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
23040 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
23050 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b 20  t bSmallMalloc; 
23060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23070 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67 65 20 6d  /* Avoid large m
23080 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
23090 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 69  s if true */.  i
230a0 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
230d0 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
230e0 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b  nt neverCorrupt;
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23100 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
23110 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d  always well-form
23120 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f  ed */.  int szLo
23130 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
23140 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
23150 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
23160 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20  uffer size */.  
23170 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20  int nLookaside; 
23180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23190 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
231a0 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f  kaside buffer co
231b0 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  unt */.  int nSt
231c0 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20  mtSpill;        
231d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
231e0 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c  mt-journal spill
231f0 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f  -to-disk thresho
23200 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ld */.  sqlite3_
23210 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
23220 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
23230 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
23240 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
23250 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
23260 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
23270 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
23280 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
23290 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
232a0 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
232b0 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a  ds2 pcache2;  /*
232c0 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
232d0 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
232e0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
232f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23300 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
23310 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
23320 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
23330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23340 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
23350 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
23360 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
23370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23380 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
23390 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
233a0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
233b0 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  t64 szMmap;     
233c0 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28          /* mmap(
233d0 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e  ) space per open
233e0 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74   file */.  sqlit
233f0 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b  e3_int64 mxMmap;
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23410 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f  Maximum value fo
23420 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f  r szMmap */.  vo
23430 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20  id *pPage;      
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23450 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65  /* Page cache me
23460 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
23470 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
23480 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
23490 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65  ize of each page
234a0 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
234b0 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20   int nPage;     
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
234e0 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d  pages in pPage[]
234f0 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73   */.  int mxPars
23500 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20  erStack;        
23510 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d          /* maxim
23520 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20  um depth of the 
23530 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a  parser stack */.
23540 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68    int sharedCach
23550 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20  eEnabled;       
23560 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73      /* true if s
23570 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
23580 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33   enabled */.  u3
23590 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20  2 szPma;        
235a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235b0 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65  /* Maximum Sorte
235c0 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20  r PMA size */.  
235d0 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67  /* The above mig
235e0 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  ht be initialize
235f0 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20  d to non-zero.  
23600 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65  The following ne
23610 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a  ed to always.  *
23620 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a  * initially be z
23630 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f  ero, however. */
23640 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20  .  int isInit;  
23650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23660 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
23670 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  er initializatio
23680 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a  n has finished *
23690 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65  /.  int inProgre
236a0 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ss;             
236b0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68        /* True wh
236c0 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ile initializati
236d0 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a  on in progress *
236e0 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49  /.  int isMutexI
236f0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
23700 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
23710 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20  ter mutexes are 
23720 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
23730 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69   int isMallocIni
23740 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
23750 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
23760 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
23770 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
23780 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20  isPCacheInit;   
23790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
237a0 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
237b0 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
237c0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49  d */.  int nRefI
237d0 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
237e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
237f0 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70  er of users of p
23800 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73  InitMutex */.  s
23810 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49  qlite3_mutex *pI
23820 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
23830 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62   /* Mutex used b
23840 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  y sqlite3_initia
23850 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  lize() */.  void
23860 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69   (*xLog)(void*,i
23870 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
23880 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72   /* Function for
23890 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f   logging */.  vo
238a0 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20  id *pLogArg;    
238b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238c0 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
238d0 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a  ment to xLog() *
238e0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
238f0 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20  ENABLE_SQLLOG.  
23900 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76  void(*xSqllog)(v
23910 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
23920 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
23930 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67  .  void *pSqllog
23940 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  Arg;.#endif.#ifd
23950 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ef SQLITE_VDBE_C
23960 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65  OVERAGE.  /* The
23970 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62   following callb
23980 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c  ack (if not NULL
23990 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  ) is invoked on 
239a0 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e 63  every VDBE branc
239b0 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  h.  ** operation
239c0 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62  .  Set the callb
239d0 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45  ack using SQLITE
239e0 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43  _TESTCTRL_VDBE_C
239f0 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20  OVERAGE..  */.  
23a00 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e  void (*xVdbeBran
23a10 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53  ch)(void*,int iS
23a20 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c  rcLine,u8 eThis,
23a30 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c  u8 eMx);  /* Cal
23a40 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
23a50 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b  *pVdbeBranchArg;
23a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a80 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
23a90 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ment */.#endif.#
23aa0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
23ab0 54 45 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28  TESTABLE.  int (
23ac0 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28  *xTestCallback)(
23ad0 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  int);        /* 
23ae0 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74  Invoked by sqlit
23af0 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a  e3FaultSim() */.
23b00 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f  #endif.  int bLo
23b10 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
23b20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
23b30 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
23b40 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
23b50 20 20 69 6e 74 20 69 4f 6e 63 65 52 65 73 65 74    int iOnceReset
23b60 54 68 72 65 73 68 6f 6c 64 3b 20 20 20 20 20 20  Threshold;      
23b70 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72      /* When to r
23b80 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75  eset OP_Once cou
23b90 6e 74 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  nters */.};../*.
23ba0 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  ** This macro is
23bb0 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
23bc0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
23bd0 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20  nts to indicate 
23be0 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65  that.** the asse
23bf0 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  rt is only valid
23c00 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65   on a well-forme
23c10 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73  d database.  Ins
23c20 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20  tead of:.**.**  
23c30 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a     assert( X );.
23c40 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73  **.** One writes
23c50 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
23c60 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54  rt( X || CORRUPT
23c70 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52  _DB );.**.** COR
23c80 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20  RUPT_DB is true 
23c90 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70  during normal op
23ca0 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50  eration.  CORRUP
23cb0 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e  T_DB does not in
23cc0 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74  dicate.** that t
23cd0 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64  he database is d
23ce0 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70  efinitely corrup
23cf0 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20  t, only that it 
23d00 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74  might be corrupt
23d10 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65  ..** For most te
23d20 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50  st cases, CORRUP
23d30 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66  T_DB is set to f
23d40 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65  alse using a spe
23d50 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  cial.** sqlite3_
23d60 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20  test_control(). 
23d70 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73   This enables as
23d80 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
23d90 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68  s to prove.** th
23da0 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c  ings that are al
23db0 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65  ways true for we
23dc0 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
23dd0 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ses..*/.#define 
23de0 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c  CORRUPT_DB  (sql
23df0 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72  ite3Config.never
23e00 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a  Corrupt==0)../*.
23e10 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
23e20 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
23e30 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
23e40 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
23e50 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65  Walker {.  Parse
23e60 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
23e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e80 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63       /* Parser c
23e90 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e  ontext.  */.  in
23ea0 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63  t (*xExprCallbac
23eb0 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  k)(Walker*, Expr
23ec0 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  *);     /* Callb
23ed0 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69  ack for expressi
23ee0 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  ons */.  int (*x
23ef0 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28  SelectCallback)(
23f00 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
23f10 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66  ;  /* Callback f
23f20 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
23f30 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61  void (*xSelectCa
23f40 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a  llback2)(Walker*
23f50 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63  ,Select*);/* Sec
23f60 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  ond callback for
23f70 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e   SELECTs */.  in
23f80 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20  t walkerDepth;  
23f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fa0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
23fb0 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20  r of subqueries 
23fc0 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20  */.  u8 eCode;  
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23ff0 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73  * A small proces
24000 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75  sing code */.  u
24010 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20  nion {          
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24030 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72           /* Extr
24040 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62  a data for callb
24050 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43  ack */.    NameC
24060 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20  ontext *pNC;    
24070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24080 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63       /* Naming c
24090 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e  ontext */.    in
240a0 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
240b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240c0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75          /* A cou
240d0 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nter */.    int 
240e0 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  iCur;           
240f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24100 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f        /* A curso
24110 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
24120 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
24130 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24140 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
24150 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
24160 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
24170 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
24180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
24190 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66  nting column ref
241a0 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73  erences */.    s
241b0 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a  truct CCurHint *
241c0 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20  pCCurHint;      
241d0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
241e0 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69   by codeCursorHi
241f0 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nt() */.    int 
24200 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  *aiCol;         
24210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24220 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f        /* array o
24230 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73  f column indexes
24240 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49   */.    struct I
24250 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f 76  dxCover *pIdxCov
24260 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
24270 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 69    /* Check for i
24280 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a 2f  ndex coverage */
24290 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78 45  .    struct IdxE
242a0 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78 54 72  xprTrans *pIdxTr
242b0 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ans;           /
242c0 2a 20 43 6f 6e 76 65 72 74 20 69 6e 64 65 78 65  * Convert indexe
242d0 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e  d expr to column
242e0 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74   */.    ExprList
242f0 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20   *pGroupBy;     
24300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24310 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20 63 6c    /* GROUP BY cl
24320 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  ause */.    stru
24330 63 74 20 48 61 76 69 6e 67 54 6f 57 68 65 72 65  ct HavingToWhere
24340 43 74 78 20 2a 70 48 61 76 69 6e 67 43 74 78 3b  Ctx *pHavingCtx;
24350 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e 47 20        /* HAVING 
24360 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  to WHERE clause 
24370 63 74 78 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  ctx */.  } u;.};
24380 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63  ../* Forward dec
24390 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74  larations */.int
243a0 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
243b0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
243c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
243d0 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72  kExprList(Walker
243e0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
243f0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
24400 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65  lect(Walker*, Se
24410 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
24420 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70  te3WalkSelectExp
24430 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  r(Walker*, Selec
24440 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24450 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57  WalkSelectFrom(W
24460 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
24470 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
24480 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72  rWalkNoop(Walker
24490 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
244a0 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b  qlite3SelectWalk
244b0 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Noop(Walker*, Se
244c0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
244d0 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46 61 69  te3SelectWalkFai
244e0 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  l(Walker*, Selec
244f0 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  t*);.#ifdef SQLI
24500 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71  TE_DEBUG.void sq
24510 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 41  lite3SelectWalkA
24520 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20  ssert2(Walker*, 
24530 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66  Select*);.#endif
24540 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63  ../*.** Return c
24550 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72  ode from the par
24560 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20  se-tree walking 
24570 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74  primitives and t
24580 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  heir.** callback
24590 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  s..*/.#define WR
245a0 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20  C_Continue    0 
245b0 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f    /* Continue do
245c0 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e  wn into children
245d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
245e0 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20  Prune       1   
245f0 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e  /* Omit children
24600 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61   but continue wa
24610 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a  lking siblings *
24620 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62  /.#define WRC_Ab
24630 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a  ort       2   /*
24640 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65   Abandon the tre
24650 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  e walk */../*.**
24660 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
24670 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72  this structure r
24680 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20  epresents a set 
24690 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43  of one or more C
246a0 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74  TEs.** (common t
246b0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
246c0 29 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73  ) created by a s
246d0 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73  ingle WITH claus
246e0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74  e..*/.struct Wit
246f0 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20  h {.  int nCte; 
24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24710 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
24720 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57  of CTEs in the W
24730 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ITH clause */.  
24740 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20  With *pOuter;   
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24760 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49  /* Containing WI
24770 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
24780 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43  LL */.  struct C
24790 74 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  te {            
247a0 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65          /* For e
247b0 61 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57  ach CTE in the W
247c0 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a  ITH clause.... *
247d0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
247e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
247f0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
24800 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
24810 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73   ExprList *pCols
24820 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24830 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c   /* List of expl
24840 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  icit column name
24850 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s, or NULL */.  
24860 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
24870 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24880 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74    /* The definit
24890 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20  ion of this CTE 
248a0 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  */.    const cha
248b0 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20  r *zCteErr;     
248c0 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
248d0 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63  message for circ
248e0 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20  ular references 
248f0 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a  */.  } a[1];.};.
24900 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
24910 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  EBUG./*.** An in
24920 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72  stance of the Tr
24930 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73  eeView object is
24940 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69   used for printi
24950 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
24960 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74  f.** data struct
24970 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44  ures on sqlite3D
24980 65 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69  ebugPrintf() usi
24990 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76  ng a tree-like v
249a0 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  iew..*/.struct T
249b0 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20  reeView {.  int 
249c0 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
249d0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76      /* Which lev
249e0 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77  el of the tree w
249f0 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38  e are on */.  u8
24a00 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20    bLine[100];   
24a10 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65        /* Draw ve
24a20 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e  rtical in column
24a30 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69   i if bLine[i] i
24a40 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e  s true */.};.#en
24a50 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
24a60 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73  BUG */../*.** As
24a70 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
24a80 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
24a90 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
24aa0 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
24ab0 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
24ac0 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
24ad0 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
24ae0 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
24af0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
24b00 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
24b10 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
24b20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
24b30 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
24b40 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
24b70 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
24b80 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
24b90 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
24ba0 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bd0 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
24be0 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
24bf0 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
24c00 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
24c10 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
24c20 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
24c30 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
24c40 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
24c50 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
24c60 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
24c70 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
24c80 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
24c90 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
24ca0 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
24cb0 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
24cc0 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
24cd0 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
24ce0 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
24cf0 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
24d00 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
24d10 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
24d20 65 33 52 65 70 6f 72 74 45 72 72 6f 72 28 69 6e  e3ReportError(in
24d30 74 20 69 45 72 72 2c 20 69 6e 74 20 6c 69 6e 65  t iErr, int line
24d40 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  no, const char *
24d50 7a 54 79 70 65 29 3b 0a 69 6e 74 20 73 71 6c 69  zType);.int sqli
24d60 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
24d70 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
24d80 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
24d90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
24da0 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
24db0 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
24dc0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
24dd0 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
24de0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
24df0 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
24e00 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
24e10 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
24e20 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
24e30 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
24e40 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
24e50 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
24e60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
24e70 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  BUG.  int sqlite
24e80 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29  3NomemError(int)
24e90 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  ;.  int sqlite3I
24ea0 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69  oerrnomemError(i
24eb0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
24ec0 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72  e3CorruptPgnoErr
24ed0 6f 72 28 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20  or(int,Pgno);.# 
24ee0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
24ef0 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  MEM_BKPT sqlite3
24f00 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e  NomemError(__LIN
24f10 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51  E__).# define SQ
24f20 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
24f30 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65  _BKPT sqlite3Ioe
24f40 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c  rrnomemError(__L
24f50 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20  INE__).# define 
24f60 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50  SQLITE_CORRUPT_P
24f70 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f  GNO(P) sqlite3Co
24f80 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f  rruptPgnoError(_
24f90 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c  _LINE__,(P)).#el
24fa0 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
24fb0 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51  TE_NOMEM_BKPT SQ
24fc0 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66  LITE_NOMEM.# def
24fd0 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ine SQLITE_IOERR
24fe0 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49  _NOMEM_BKPT SQLI
24ff0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23  TE_IOERR_NOMEM.#
25000 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
25010 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73  ORRUPT_PGNO(P) s
25020 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
25030 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e  or(__LINE__).#en
25040 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20  dif../*.** FTS3 
25050 61 6e 64 20 46 54 53 34 20 62 6f 74 68 20 72 65  and FTS4 both re
25060 71 75 69 72 65 20 76 69 72 74 75 61 6c 20 74 61  quire virtual ta
25070 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23  ble support.*/.#
25080 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
25090 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
250a0 42 4c 45 29 0a 23 20 75 6e 64 65 66 20 53 51 4c  BLE).# undef SQL
250b0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a  ITE_ENABLE_FTS3.
250c0 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
250d0 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69  NABLE_FTS4.#endi
250e0 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73  f../*.** FTS4 is
250f0 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e   really an exten
25100 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20  sion for FTS3.  
25110 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73  It is enabled us
25120 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54  ing the.** SQLIT
25130 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61  E_ENABLE_FTS3 ma
25140 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f  cro.  But to avo
25150 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20  id confusion we 
25160 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  also call.** the
25170 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
25180 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72  TS4 macro to ser
25190 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ve as an alias f
251a0 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
251b0 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65  _FTS3..*/.#if de
251c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
251d0 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65  BLE_FTS4) && !de
251e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
251f0 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69  BLE_FTS3).# defi
25200 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
25210 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a  _FTS3 1.#endif..
25220 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e  /*.** The ctype.
25230 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64  h header is need
25240 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49  ed for non-ASCII
25250 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73   systems.  It is
25260 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20   also.** needed 
25270 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53  by FTS3 when FTS
25280 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  3 is included in
25290 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f   the amalgamatio
252a0 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
252b0 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29  ed(SQLITE_ASCII)
252c0 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
252d0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
252e0 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65  _FTS3) && define
252f0 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  d(SQLITE_AMALGAM
25300 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64  ATION)).# includ
25310 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64  e <ctype.h>.#end
25320 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
25330 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
25340 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72  imic the standar
25350 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  d library functi
25360 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a  ons toupper(),.*
25370 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61  * isspace(), isa
25380 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28  lnum(), isdigit(
25390 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29  ) and isxdigit()
253a0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
253b0 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65  The.** sqlite ve
253c0 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  rsions only work
253d0 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
253e0 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  cters, regardles
253f0 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a  s of locale..*/.
25400 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53  #ifdef SQLITE_AS
25410 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  CII.# define sql
25420 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
25430 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74  ((x)&~(sqlite3Ct
25440 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
25450 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29   char)(x)]&0x20)
25460 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25470 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28  e3Isspace(x)   (
25480 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
25490 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
254a0 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69  x)]&0x01).# defi
254b0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
254c0 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  m(x)   (sqlite3C
254d0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
254e0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36  d char)(x)]&0x06
254f0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25500 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28  e3Isalpha(x)   (
25510 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
25520 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
25530 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69  x)]&0x02).# defi
25540 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
25550 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  t(x)   (sqlite3C
25560 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
25570 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34  d char)(x)]&0x04
25580 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25590 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28  e3Isxdigit(x)  (
255a0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
255b0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
255c0 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69  x)]&0x08).# defi
255d0 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
255e0 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55  r(x)   (sqlite3U
255f0 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73  pperToLower[(uns
25600 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29  igned char)(x)])
25610 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25620 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28 73  3Isquote(x)   (s
25630 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
25640 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25650 29 5d 26 30 78 38 30 29 0a 23 65 6c 73 65 0a 23  )]&0x80).#else.#
25660 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
25670 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70  oupper(x)   toup
25680 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  per((unsigned ch
25690 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
256a0 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
256b0 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e  x)   isspace((un
256c0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
256d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
256e0 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73  3Isalnum(x)   is
256f0 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20  alnum((unsigned 
25700 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
25710 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
25720 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28  a(x)   isalpha((
25730 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25740 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
25750 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
25760 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  isdigit((unsigne
25770 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
25780 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
25790 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69  igit(x)  isxdigi
257a0 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
257b0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
257c0 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
257d0 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69     tolower((unsi
257e0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
257f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25800 73 71 75 6f 74 65 28 78 29 20 20 20 28 28 78 29  squote(x)   ((x)
25810 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27  =='"'||(x)=='\''
25820 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d  ||(x)=='['||(x)=
25830 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a 23 69 66  ='`').#endif.#if
25840 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25850 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
25860 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  IAGS.int sqlite3
25870 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 23 65  IsIdChar(u8);.#e
25880 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
25890 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72  rnal function pr
258a0 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20  ototypes.*/.int 
258b0 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63  sqlite3StrICmp(c
258c0 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
258d0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
258e0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
258f0 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
25900 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79  *sqlite3ColumnTy
25910 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a  pe(Column*,char*
25920 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
25930 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
25940 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
25950 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
25960 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
25970 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
25980 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
25990 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b  ite3Malloc(u64);
259a0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
259b0 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76  llocZero(u64);.v
259c0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
259d0 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
259e0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
259f0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
25a00 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  w(sqlite3*, u64)
25a10 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
25a20 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c  bMallocRawNN(sql
25a30 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61  ite3*, u64);.cha
25a40 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44  r *sqlite3DbStrD
25a50 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
25a60 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
25a70 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70  sqlite3DbStrNDup
25a80 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
25a90 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  char*, u64);.voi
25aa0 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
25ab0 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76  c(void*, u64);.v
25ac0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
25ad0 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69  allocOrFree(sqli
25ae0 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
25af0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
25b00 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69  e3DbRealloc(sqli
25b10 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
25b20 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  64);.void sqlite
25b30 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a  3DbFree(sqlite3*
25b40 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
25b50 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 73  qlite3DbFreeNN(s
25b60 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
25b70 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
25b80 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69  ocSize(void*);.i
25b90 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  nt sqlite3DbMall
25ba0 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c  ocSize(sqlite3*,
25bb0 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73   void*);.void *s
25bc0 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63  qlite3PageMalloc
25bd0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
25be0 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64  te3PageFree(void
25bf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25c00 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f  MemSetDefault(vo
25c10 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  id);.#ifndef SQL
25c20 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76  ITE_UNTESTABLE.v
25c30 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67  oid sqlite3Benig
25c40 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69  nMallocHooks(voi
25c50 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69  d (*)(void), voi
25c60 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65  d (*)(void));.#e
25c70 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
25c80 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76  HeapNearlyFull(v
25c90 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20  oid);../*.** On 
25ca0 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70  systems with amp
25cb0 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61  le stack space a
25cc0 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20  nd that support 
25cd0 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a  alloca(), make.*
25ce0 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28  * use of alloca(
25cf0 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63  ) to obtain spac
25d00 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f  e for large auto
25d10 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20  matic objects.  
25d20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f  By default,.** o
25d30 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d  btain space from
25d40 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a   malloc()..**.**
25d50 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f   The alloca() ro
25d60 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75  utine never retu
25d70 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20  rns NULL.  This 
25d80 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20  will cause code 
25d90 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65  paths.** that de
25da0 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53  al with sqlite3S
25db0 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c  tackAlloc() fail
25dc0 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61  ures to be unrea
25dd0 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  chable..*/.#ifde
25de0 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c  f SQLITE_USE_ALL
25df0 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  OCA.# define sql
25e00 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
25e10 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28  w(D,N)   alloca(
25e20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
25e30 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
25e40 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61  o(D,N)  memset(a
25e50 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a  lloca(N), 0, N).
25e60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25e70 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23  StackFree(D,P).#
25e80 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
25e90 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
25ea0 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65  aw(D,N)   sqlite
25eb0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e  3DbMallocRaw(D,N
25ec0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25ed0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
25ee0 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62  (D,N)  sqlite3Db
25ef0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a  MallocZero(D,N).
25f00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25f10 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
25f20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
25f30 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ee(D,P).#endif..
25f40 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  /* Do not allow 
25f50 62 6f 74 68 20 4d 45 4d 53 59 53 35 20 61 6e 64  both MEMSYS5 and
25f60 20 4d 45 4d 53 59 53 33 20 74 6f 20 62 65 20 64   MEMSYS3 to be d
25f70 65 66 69 6e 65 64 20 74 6f 67 65 74 68 65 72 2e  efined together.
25f80 20 20 49 66 20 74 68 65 79 0a 2a 2a 20 61 72 65    If they.** are
25f90 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d 53 59 53  , disable MEMSYS
25fa0 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  3.*/.#ifdef SQLI
25fb0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
25fc0 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  5.const sqlite3_
25fd0 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
25fe0 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
25ff0 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20  5(void);.#undef 
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 23 65 6e 64 69 66 0a 23 69 66  MSYS3.#endif.#if
26020 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
26030 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
26040 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
26050 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
26060 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
26070 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
26080 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  f SQLITE_MUTEX_O
26090 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  MIT.  sqlite3_mu
260a0 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
260b0 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c  t *sqlite3Defaul
260c0 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  tMutex(void);.  
260d0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
260e0 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
260f0 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f  ite3NoopMutex(vo
26100 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
26110 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74  utex *sqlite3Mut
26120 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20  exAlloc(int);.  
26130 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
26140 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e  Init(void);.  in
26150 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e  t sqlite3MutexEn
26160 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  d(void);.#endif.
26170 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
26180 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20  ITE_MUTEX_OMIT) 
26190 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
261a0 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20  TE_MUTEX_NOOP). 
261b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
261c0 6f 72 79 42 61 72 72 69 65 72 28 76 6f 69 64 29  oryBarrier(void)
261d0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
261e0 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61   sqlite3MemoryBa
261f0 72 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a  rrier().#endif..
26200 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
26210 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
26220 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
26230 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c  te3StatusUp(int,
26240 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26250 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e  te3StatusDown(in
26260 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
26270 6c 69 74 65 33 53 74 61 74 75 73 48 69 67 68 77  lite3StatusHighw
26280 61 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  ater(int, int);.
26290 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f 6f 6b 61  int sqlite3Looka
262a0 73 69 64 65 55 73 65 64 28 73 71 6c 69 74 65 33  sideUsed(sqlite3
262b0 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63  *,int*);../* Acc
262c0 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75  ess to mutexes u
262d0 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73  sed by sqlite3_s
262e0 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74  tatus() */.sqlit
262f0 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
26300 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f  3Pcache1Mutex(vo
26310 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74  id);.sqlite3_mut
26320 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  ex *sqlite3Mallo
26330 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23  cMutex(void);..#
26340 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
26350 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 54 48  E_ENABLE_MULTITH
26360 52 45 41 44 45 44 5f 43 48 45 43 4b 53 29 20 26  READED_CHECKS) &
26370 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
26380 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 0a 76 6f  E_MUTEX_OMIT).vo
26390 69 64 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57  id sqlite3MutexW
263a0 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28  arnOnContention(
263b0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 2a 29 3b  sqlite3_mutex*);
263c0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
263d0 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e  sqlite3MutexWarn
263e0 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 78 29 0a  OnContention(x).
263f0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
26400 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
26410 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74  TING_POINT.  int
26420 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f   sqlite3IsNaN(do
26430 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  uble);.#else.# d
26440 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
26450 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a  aN(X)  0.#endif.
26460 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
26470 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
26480 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f  ing structure ho
26490 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
264a0 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e  about SQL.** fun
264b0 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73  ctions arguments
264c0 20 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61   that are the pa
264d0 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20  rameters to the 
264e0 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f  printf() functio
264f0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69  n..*/.struct Pri
26500 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20  ntfArguments {. 
26510 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20   int nArg;      
26520 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74            /* Tot
26530 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  al number of arg
26540 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  uments */.  int 
26550 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20  nUsed;          
26560 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
26570 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64  f arguments used
26580 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c   so far */.  sql
26590 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41  ite3_value **apA
265a0 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67  rg;   /* The arg
265b0 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a  ument values */.
265c0 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  };..void sqlite3
265d0 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  VXPrintf(StrAccu
265e0 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  m*, const char*,
265f0 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20   va_list);.void 
26600 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53  sqlite3XPrintf(S
26610 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20  trAccum*, const 
26620 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
26630 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
26640 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
26650 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
26660 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69  ar *sqlite3VMPri
26670 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
26680 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
26690 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
266a0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
266b0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
266c0 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20  HAVE_OS_TRACE). 
266d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62   void sqlite3Deb
266e0 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  ugPrintf(const c
266f0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64  har*, ...);.#end
26700 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
26710 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f  QLITE_TEST).  vo
26720 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54  id *sqlite3TestT
26730 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63  extToPtr(const c
26740 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
26750 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
26760 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20  E_DEBUG).  void 
26770 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
26780 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63  xpr(TreeView*, c
26790 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b  onst Expr*, u8);
267a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
267b0 72 65 65 56 69 65 77 42 61 72 65 45 78 70 72 4c  reeViewBareExprL
267c0 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
267d0 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
267e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
267f0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
26800 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65  ViewExprList(Tre
26810 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
26820 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e  prList*, u8, con
26830 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
26840 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
26850 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77  wSelect(TreeView
26860 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a  *, const Select*
26870 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
26880 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 74  lite3TreeViewWit
26890 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  h(TreeView*, con
268a0 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  st With*, u8);.#
268b0 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c  endif...void sql
268c0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68  ite3SetString(ch
268d0 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ar **, sqlite3*,
268e0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
268f0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
26900 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Msg(Parse*, cons
26910 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
26920 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f  oid sqlite3Dequo
26930 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  te(char*);.void 
26940 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74  sqlite3TokenInit
26950 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a  (Token*,char*);.
26960 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
26970 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
26980 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
26990 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
269a0 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
269b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
269c0 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
269d0 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
269e0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
269f0 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
26a00 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
26a10 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
26a20 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
26a30 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
26a40 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
26a50 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26a60 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
26a70 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
26a80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
26a90 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65  learTempRegCache
26aa0 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66  (Parse*);.#ifdef
26ab0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
26ac0 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73  t sqlite3NoTemps
26ad0 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  InRange(Parse*,i
26ae0 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  nt,int);.#endif.
26af0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
26b00 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
26b10 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
26b20 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
26b30 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
26b40 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
26b50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26b60 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
26b70 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
26b80 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
26b90 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
26ba0 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
26bb0 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
26bc0 6f 69 64 20 73 71 6c 69 74 65 33 50 45 78 70 72  oid sqlite3PExpr
26bd0 41 64 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a  AddSelect(Parse*
26be0 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a  , Expr*, Select*
26bf0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
26c00 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a  ExprAnd(sqlite3*
26c10 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  ,Expr*, Expr*);.
26c20 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
26c30 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a  rFunction(Parse*
26c40 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65  ,ExprList*, Toke
26c50 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
26c60 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75  3ExprAssignVarNu
26c70 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70  mber(Parse*, Exp
26c80 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  r*, u32);.void s
26c90 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65  qlite3ExprDelete
26ca0 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a  (sqlite3*, Expr*
26cb0 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
26cc0 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
26cd0 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  nd(Parse*,ExprLi
26ce0 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  st*,Expr*);.Expr
26cf0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
26d00 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f  rListAppendVecto
26d10 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  r(Parse*,ExprLis
26d20 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a  t*,IdList*,Expr*
26d30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26d40 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72  xprListSetSortOr
26d50 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e  der(ExprList*,in
26d60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26d70 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
26d80 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
26d90 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
26da0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
26db0 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
26dc0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
26dd0 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
26de0 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
26df0 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
26e00 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69  List*);.u32 sqli
26e10 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73  te3ExprListFlags
26e20 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a  (const ExprList*
26e30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
26e40 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  it(sqlite3*, cha
26e50 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r**);.int sqlite
26e60 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f  3InitCallback(vo
26e70 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a  id*, int, char**
26e80 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20  , char**);.void 
26e90 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61  sqlite3Pragma(Pa
26ea0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
26eb0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  n*,Token*,int);.
26ec0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26ed0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
26ee0 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33  .Module *sqlite3
26ef0 50 72 61 67 6d 61 56 74 61 62 52 65 67 69 73 74  PragmaVtabRegist
26f00 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  er(sqlite3*,cons
26f10 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a  t char *zName);.
26f20 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
26f30 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
26f40 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73  asOfConnection(s
26f50 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
26f60 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
26f70 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e  hema(sqlite3*,in
26f80 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26f90 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65  CollapseDatabase
26fa0 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b  Array(sqlite3*);
26fb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
26fc0 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  mitInternalChang
26fd0 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  es(sqlite3*);.vo
26fe0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
26ff0 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69  ColumnNames(sqli
27000 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e  te3*,Table*);.in
27010 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73  t sqlite3Columns
27020 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72  FromExprList(Par
27030 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31  se*,ExprList*,i1
27040 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f  6*,Column**);.vo
27050 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
27060 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64  AddColumnTypeAnd
27070 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a  Collation(Parse*
27080 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29  ,Table*,Select*)
27090 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
270a0 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63  ResultSetOfSelec
270b0 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a  t(Parse*,Select*
270c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
270d0 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50  penMasterTable(P
270e0 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e  arse *, int);.In
270f0 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d  dex *sqlite3Prim
27100 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c  aryKeyIndex(Tabl
27110 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33  e*);.i16 sqlite3
27120 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e  ColumnOfIndex(In
27130 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64  dex*, i16);.void
27140 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
27150 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
27160 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
27170 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51  int,int);.#if SQ
27180 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
27190 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69  EN_COLUMNS.  voi
271a0 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50  d sqlite3ColumnP
271b0 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d  ropertiesFromNam
271c0 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e  e(Table*, Column
271d0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
271e0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  ne sqlite3Column
271f0 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61  PropertiesFromNa
27200 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70  me(T,C) /* no-op
27210 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20   */.#endif.void 
27220 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
27230 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
27240 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
27250 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50  ite3AddNotNull(P
27260 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
27270 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d  d sqlite3AddPrim
27280 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  aryKey(Parse*, E
27290 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
272a0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
272b0 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f  qlite3AddCheckCo
272c0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
272d0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
272e0 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
272f0 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
27300 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
27310 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
27320 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
27330 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27340 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
27350 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
27360 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
27370 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
27380 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
27390 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
273a0 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
273b0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
273c0 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
273d0 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
273e0 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
273f0 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
27400 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66  nst char*);..#if
27410 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
27420 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73  TABLE.# define s
27430 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58  qlite3FaultSim(X
27440 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73  ) SQLITE_OK.#els
27450 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  e.  int sqlite3F
27460 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65  aultSim(int);.#e
27470 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71  ndif..Bitvec *sq
27480 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74  lite3BitvecCreat
27490 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  e(u32);.int sqli
274a0 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69  te3BitvecTest(Bi
274b0 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
274c0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
274d0 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63  stNotNull(Bitvec
274e0 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
274f0 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69  ite3BitvecSet(Bi
27500 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  tvec*, u32);.voi
27510 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43  d sqlite3BitvecC
27520 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33  lear(Bitvec*, u3
27530 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  2, void*);.void 
27540 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73  sqlite3BitvecDes
27550 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75  troy(Bitvec*);.u
27560 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  32 sqlite3Bitvec
27570 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23  Size(Bitvec*);.#
27580 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
27590 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c  TESTABLE.int sql
275a0 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
275b0 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b  nTest(int,int*);
275c0 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20  .#endif..RowSet 
275d0 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e  *sqlite3RowSetIn
275e0 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  it(sqlite3*, voi
275f0 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  d*, unsigned int
27600 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
27610 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65  owSetClear(RowSe
27620 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
27630 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f  3RowSetInsert(Ro
27640 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74  wSet*, i64);.int
27650 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
27660 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20  st(RowSet*, int 
27670 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e  iBatch, i64);.in
27680 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  t sqlite3RowSetN
27690 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ext(RowSet*, i64
276a0 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
276b0 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73  3CreateView(Pars
276c0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
276d0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
276e0 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
276f0 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
27700 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
27710 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
27720 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
27730 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
27740 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
27750 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
27760 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
27770 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27780 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
27790 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
277a0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
277b0 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69  _ATTACHED>30.  i
277c0 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b  nt sqlite3DbMask
277d0 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29  AllZero(yDbMask)
277e0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
277f0 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50  lite3DropTable(P
27800 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
27810 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
27820 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70   sqlite3CodeDrop
27830 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61  Table(Parse*, Ta
27840 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
27850 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
27860 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
27870 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e  *, Table*);.#ifn
27880 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27890 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
278a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
278b0 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50  incrementBegin(P
278c0 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20  arse *pParse);. 
278d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
278e0 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61  oincrementEnd(Pa
278f0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65  rse *pParse);.#e
27900 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
27910 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
27920 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  tBegin(X).# defi
27930 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
27940 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65  crementEnd(X).#e
27950 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
27960 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20  3Insert(Parse*, 
27970 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  SrcList*, Select
27980 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29  *, IdList*, int)
27990 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
279a0 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
279b0 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
279c0 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
279d0 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
279e0 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
279f0 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
27a00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
27a10 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73  dListIndex(IdLis
27a20 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
27a30 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
27a40 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28  3SrcListEnlarge(
27a50 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
27a60 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53  t*, int, int);.S
27a70 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
27a80 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  rcListAppend(sql
27a90 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
27aa0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
27ab0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
27ac0 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46  e3SrcListAppendF
27ad0 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20  romTerm(Parse*, 
27ae0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
27af0 2c 20 54 6f 6b 65 6e 2a 2c 0a 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 20 20                  
27b20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c  Token*, Select*,
27b30 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29   Expr*, IdList*)
27b40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
27b50 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50  cListIndexedBy(P
27b60 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
27b70 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
27b80 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
27b90 46 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c  FuncArgs(Parse*,
27ba0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
27bb0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
27bc0 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75  e3IndexedByLooku
27bd0 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63  p(Parse *, struc
27be0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
27bf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
27c00 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
27c10 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76  ype(SrcList*);.v
27c20 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
27c30 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28  stAssignCursors(
27c40 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
27c50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
27c60 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  dListDelete(sqli
27c70 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  te3*, IdList*);.
27c80 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
27c90 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
27ca0 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49  3*, SrcList*);.I
27cb0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c  ndex *sqlite3All
27cc0 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74  ocateIndexObject
27cd0 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e  (sqlite3*,i16,in
27ce0 74 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20  t,char**);.void 
27cf0 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64  sqlite3CreateInd
27d00 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ex(Parse*,Token*
27d10 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a  ,Token*,SrcList*
27d20 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54  ,ExprList*,int,T
27d30 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
27d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d50 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
27d60 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
27d70 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
27d80 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
27d90 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
27da0 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
27db0 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
27dc0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
27dd0 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
27de0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
27df0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
27e00 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
27e30 74 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76  t*,u32,Expr*);.v
27e40 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
27e50 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
27e60 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  , Select*);.Tabl
27e70 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  e *sqlite3SrcLis
27e80 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20  tLookup(Parse*, 
27e90 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
27ea0 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79  qlite3IsReadOnly
27eb0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
27ec0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27ed0 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72  te3OpenTable(Par
27ee0 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69  se*, int iCur, i
27ef0 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20  nt iDb, Table*, 
27f00 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  int);.#if define
27f10 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
27f20 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
27f30 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
27f40 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42  (SQLITE_OMIT_SUB
27f50 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c  QUERY).Expr *sql
27f60 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50  ite3LimitWhere(P
27f70 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
27f80 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
27f90 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e  xpr*,char*);.#en
27fa0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
27fb0 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
27fc0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
27fd0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45  r*, ExprList*, E
27fe0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
27ff0 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a  te3Update(Parse*
28000 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
28010 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c  List*,Expr*,int,
28020 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
28030 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
28040 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
28050 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
28060 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
28070 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
28080 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
28090 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
280a0 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  o*);.LogEst sqli
280b0 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
280c0 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
280d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
280e0 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
280f0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
28100 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
28110 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
28120 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
28130 65 72 65 4f 72 64 65 72 65 64 49 6e 6e 65 72 4c  ereOrderedInnerL
28140 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  oop(WhereInfo*);
28150 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
28160 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49  eIsSorted(WhereI
28170 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
28180 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c  e3WhereContinueL
28190 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
281a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
281b0 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65  reBreakLabel(Whe
281c0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
281d0 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50  lite3WhereOkOneP
281e0 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20  ass(WhereInfo*, 
281f0 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f  int*);.#define O
28200 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20  NEPASS_OFF      
28210 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20  0        /* Use 
28220 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61  of ONEPASS not a
28230 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
28240 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45  e ONEPASS_SINGLE
28250 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f     1        /* O
28260 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72  NEPASS valid for
28270 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70   a single row up
28280 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  date */.#define 
28290 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20  ONEPASS_MULTI   
282a0 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   2        /* ONE
282b0 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f  PASS is valid fo
282c0 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  r multiple rows 
282d0 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
282e0 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78  xprCodeLoadIndex
282f0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49  Column(Parse*, I
28300 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
28310 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28320 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
28330 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
28340 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
28350 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
28360 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
28370 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65  olumnToReg(Parse
28380 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
28390 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
283a0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
283b0 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
283c0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
283d0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
283e0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
283f0 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
28400 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
28410 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28420 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
28430 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
28440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28450 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
28460 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
28470 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
28480 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
28490 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d  ite3ExprCacheRem
284a0 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
284b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
284c0 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
284d0 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  r(Parse*);.void 
284e0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
284f0 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50  AffinityChange(P
28500 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
28510 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28520 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
28530 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
28540 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
28550 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70  Copy(Parse*, Exp
28560 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
28570 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
28580 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
28590 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
285a0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
285b0 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20  eAtInit(Parse*, 
285c0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
285d0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
285e0 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70  Temp(Parse*, Exp
285f0 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
28600 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61  qlite3ExprCodeTa
28610 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70  rget(Parse*, Exp
28620 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
28630 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e  qlite3ExprCodeAn
28640 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45  dCache(Parse*, E
28650 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
28660 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
28670 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
28680 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
28690 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
286a0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
286b0 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
286c0 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
286d0 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
286e0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
286f0 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
28700 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
28710 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23  stant terms */.#
28720 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
28730 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34  EL_REF      0x04
28740 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73    /* Use ExprLis
28750 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
28760 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  l */.#define SQL
28770 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46  ITE_ECEL_OMITREF
28780 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20    0x08  /* Omit 
28790 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e  if ExprList.u.x.
287a0 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76  iOrderByCol */.v
287b0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
287c0 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
287d0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
287e0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
287f0 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
28800 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
28810 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28820 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72  prIfFalseDup(Par
28830 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
28840 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71   int);.Table *sq
28850 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73  lite3FindTable(s
28860 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
28870 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
28880 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54  );.#define LOCAT
28890 45 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a 23  E_VIEW    0x01.#
288a0 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f  define LOCATE_NO
288b0 45 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65  ERR   0x02.Table
288c0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
288d0 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20  able(Parse*,u32 
288e0 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72  flags,const char
288f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
28900 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
28910 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50  ocateTableItem(P
28920 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c  arse*,u32 flags,
28930 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
28940 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  tem *);.Index *s
28950 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
28960 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28970 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
28980 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28990 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
289a0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
289b0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
289c0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
289d0 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
289e0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
289f0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
28a00 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
28a10 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69  arse*,Token*);.i
28a20 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
28a30 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
28a40 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  te3*, int);.char
28a50 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
28a60 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
28a70 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
28a80 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
28a90 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45  (Parse*,Expr*, E
28aa0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
28ab0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
28ac0 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78  reSkip(Expr*, Ex
28ad0 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
28ae0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
28af0 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
28b00 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
28b10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28b20 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72  rImpliesExpr(Par
28b30 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  se*,Expr*, Expr*
28b40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28b50 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
28b60 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f  ggregates(NameCo
28b70 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
28b80 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28b90 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e  AnalyzeAggList(N
28ba0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72  ameContext*,Expr
28bb0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
28bc0 74 65 33 45 78 70 72 43 6f 76 65 72 65 64 42 79  te3ExprCoveredBy
28bd0 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74  Index(Expr*, int
28be0 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49   iCur, Index *pI
28bf0 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  dx);.int sqlite3
28c00 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
28c10 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
28c20 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
28c30 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
28c40 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
28c50 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f  TE_UNTESTABLE.vo
28c60 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61  id sqlite3PrngSa
28c70 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  veState(void);.v
28c80 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52  oid sqlite3PrngR
28c90 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64  estoreState(void
28ca0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
28cb0 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
28cc0 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
28cd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
28ce0 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
28cf0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
28d00 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
28d10 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
28d20 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
28d30 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
28d40 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
28d50 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
28d60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28d70 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ndTransaction(Pa
28d80 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
28d90 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
28da0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f  (Parse*, int, To
28db0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
28dc0 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
28dd0 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ts(sqlite3 *);.v
28de0 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65  oid sqlite3Leave
28df0 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d  MutexAndCloseZom
28e00 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  bie(sqlite3*);.i
28e10 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
28e20 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
28e30 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28e40 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
28e50 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(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 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
28e80 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  pr*, u8);.int sq
28e90 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
28ea0 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72  antOrGroupBy(Par
28eb0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
28ec0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
28ed0 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f  te3ExprIsTableCo
28ee0 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74  nstant(Expr*,int
28ef0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
28f00 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
28f10 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  INTS.int sqlite3
28f20 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71  ExprContainsSubq
28f30 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e  uery(Expr*);.#en
28f40 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  dif.int sqlite3E
28f50 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
28f60 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
28f70 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
28f80 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
28f90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28fa0 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
28fb0 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
28fc0 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
28fd0 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
28fe0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
28ff0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
29000 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50  RowDelete(.    P
29010 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
29020 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
29030 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69  t,i16,u8,u8,u8,i
29040 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29050 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
29060 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
29070 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
29080 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  , int*, int);.in
29090 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
290a0 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
290b0 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
290c0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
290d0 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
290e0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
290f0 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65  rtIdxLabel(Parse
29100 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
29110 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
29120 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
29130 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
29140 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
29150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29170 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
29180 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 23 69 66 64  int*,int*);.#ifd
29190 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
291a0 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69  _NULL_TRIM.  voi
291b0 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65  d sqlite3SetMake
291c0 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54  RecordP5(Vdbe*,T
291d0 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
291e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
291f0 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c  tMakeRecordP5(A,
29200 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  B).#endif.void s
29210 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
29220 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
29230 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
29240 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
29250 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
29260 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
29270 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
29280 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74  e*, int, u8, int
29290 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
292a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
292b0 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
292c0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
292d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
292e0 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
292f0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
29300 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
29310 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
29320 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
29330 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
29340 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
29350 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
29360 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
29370 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
29380 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
29390 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
293a0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
293b0 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
293c0 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
293d0 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
293e0 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
293f0 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
29400 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
29410 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
29420 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
29430 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
29440 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
29450 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
29460 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
29470 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
29480 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
29490 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
294a0 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54  int);.#if SELECT
294b0 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f  TRACE_ENABLED.vo
294c0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
294d0 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c  SetName(Select*,
294e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
294f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
29500 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
29510 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  e(A,B).#endif.vo
29520 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
29530 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e  BuiltinFuncs(Fun
29540 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  cDef*,int);.Func
29550 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
29560 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
29570 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
29580 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  t,u8,u8);.void s
29590 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
295a0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76  iltinFunctions(v
295b0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
295c0 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
295d0 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
295e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
295f0 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63  egisterPerConnec
29600 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74  tionBuiltinFunct
29610 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
29620 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
29630 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
29640 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
29650 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
29660 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
29670 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
29680 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
29690 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
296a0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
296b0 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
296c0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
296d0 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
296e0 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
296f0 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
29700 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73  , Expr*, ExprLis
29710 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23  t*,Expr*,int);.#
29720 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
29730 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
29740 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
29750 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
29760 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
29770 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
29780 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
29790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297a0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
297b0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
297c0 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
297d0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
297e0 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
297f0 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
29800 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
29810 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
29820 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
29830 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
29840 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
29850 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
29860 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
29870 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
29880 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
29890 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
298a0 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
298b0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
298c0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
298d0 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
298e0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
298f0 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
29900 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
29910 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
29920 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
29930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29940 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
29950 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
29960 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
29970 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
29980 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
29990 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
299a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
299b0 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
299c0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
299d0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
299e0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
299f0 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
29a00 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
29a10 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
29a20 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
29a30 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
29a40 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
29a50 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
29a60 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
29a70 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
29a80 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
29a90 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
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 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
29ad0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
29ae0 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
29af0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
29b00 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
29b10 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
29b20 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
29b30 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
29b40 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
29b50 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
29b60 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
29b70 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
29b80 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
29b90 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
29ba0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
29bb0 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
29bc0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
29bd0 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
29be0 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
29bf0 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
29c00 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
29c10 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
29c20 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
29c30 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
29c40 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
29c50 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
29c60 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29c70 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
29c80 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d  ((p)->pToplevel=
29c90 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
29ca0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
29cb0 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
29cc0 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
29cd0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
29ce0 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
29cf0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
29d00 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
29d10 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
29d20 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
29d30 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
29d40 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
29d50 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
29d60 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
29d70 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
29d80 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
29d90 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
29da0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
29db0 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
29dc0 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
29dd0 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
29de0 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
29df0 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
29e00 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  p) 1.# define sq
29e10 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
29e20 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
29e30 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
29e40 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
29e50 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
29e60 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
29e70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
29e80 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
29e90 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
29ea0 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
29eb0 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
29ec0 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
29ed0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
29ee0 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
29ef0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
29f00 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
29f10 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
29f20 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
29f30 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
29f40 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
29f50 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
29f60 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
29f70 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
29f80 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
29f90 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
29fa0 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
29fb0 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
29fc0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
29fd0 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
29fe0 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
29ff0 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
2a000 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
2a010 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2a020 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
2a030 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
2a040 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2a050 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
2a060 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2a070 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
2a080 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
2a090 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
2a0a0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
2a0b0 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
2a0c0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
2a0d0 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
2a0e0 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
2a0f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
2a100 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
2a110 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
2a120 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2a130 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
2a140 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2a150 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
2a160 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
2a170 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2a180 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
2a190 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
2a1a0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
2a1b0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2a1c0 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
2a1d0 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
2a1e0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
2a1f0 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
2a200 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2a210 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
2a220 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
2a230 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2a240 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
2a250 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
2a260 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
2a270 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
2a280 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
2a290 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2a2a0 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
2a2b0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
2a2c0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
2a2d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69  const char*);.#i
2a2e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a2f0 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69  T_UTF16.int sqli
2a300 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
2a310 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
2a320 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23  a, int nChar);.#
2a330 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2a340 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
2a350 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
2a360 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
2a370 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
2a380 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67  const u8**);.Log
2a390 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
2a3a0 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73  t(u64);.LogEst s
2a3b0 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28  qlite3LogEstAdd(
2a3c0 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a  LogEst,LogEst);.
2a3d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a3e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2a3f0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
2a400 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28  ogEstFromDouble(
2a410 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a  double);.#endif.
2a420 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2a430 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
2a440 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a  CANSTATUS) || \.
2a450 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
2a460 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
2a470 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20  OR_STAT4) || \. 
2a480 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
2a490 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41  E_EXPLAIN_ESTIMA
2a4a0 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71  TED_ROWS).u64 sq
2a4b0 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
2a4c0 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66  (LogEst);.#endif
2a4d0 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56  .VList *sqlite3V
2a4e0 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a  ListAdd(sqlite3*
2a4f0 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  ,VList*,const ch
2a500 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f  ar*,int,int);.co
2a510 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2a520 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
2a530 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74  VList*,int);.int
2a540 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d   sqlite3VListNam
2a550 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f  eToNum(VList*,co
2a560 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2a570 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
2a580 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
2a590 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
2a5a0 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
2a5b0 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
2a5c0 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
2a5d0 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
2a5e0 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
2a5f0 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
2a600 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
2a610 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
2a620 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
2a630 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
2a640 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
2a650 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2a660 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
2a670 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2a680 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
2a690 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
2a6a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
2a6b0 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
2a6c0 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
2a6d0 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
2a6e0 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
2a6f0 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
2a700 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
2a710 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
2a720 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
2a730 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
2a740 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
2a750 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
2a760 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
2a770 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
2a780 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
2a790 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2a7a0 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
2a7b0 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
2a7c0 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
2a7d0 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
2a7e0 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
2a7f0 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
2a800 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
2a810 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
2a820 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
2a830 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
2a840 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
2a850 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
2a860 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
2a870 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
2a880 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
2a890 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
2a8a0 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
2a8b0 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
2a8c0 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74  ffinityStr(sqlit
2a8d0 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  e3*, Index*);.vo
2a8e0 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
2a8f0 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
2a900 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
2a910 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
2a920 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
2a930 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
2a940 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
2a950 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
2a960 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
2a970 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
2a980 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43  ar sqlite3TableC
2a990 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61  olumnAffinity(Ta
2a9a0 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20  ble*,int);.char 
2a9b0 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
2a9c0 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
2a9d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2a9e0 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
2a9f0 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
2aa00 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
2aa10 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
2aa20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
2aa30 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  id sqlite3ErrorW
2aa40 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c  ithMsg(sqlite3*,
2aa50 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2aa60 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  *,...);.void sql
2aa70 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
2aa80 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2aa90 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72  lite3SystemError
2aaa0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2aab0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78  void *sqlite3Hex
2aac0 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c  ToBlob(sqlite3*,
2aad0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
2aae0 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74  int n);.u8 sqlit
2aaf0 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  e3HexToInt(int h
2ab00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77  );.int sqlite3Tw
2ab10 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20  oPartName(Parse 
2ab20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2ab30 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a  n *, Token **);.
2ab40 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2ab50 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
2ab60 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  E).const char *s
2ab70 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
2ab80 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73  t);.#endif..cons
2ab90 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
2aba0 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20  rrStr(int);.int 
2abb0 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
2abc0 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  a(Parse *pParse)
2abd0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2abe0 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71  e3FindCollSeq(sq
2abf0 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63  lite3*,u8 enc, c
2ac00 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2ac10 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2ac20 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50  3LocateCollSeq(P
2ac30 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
2ac40 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b  nst char*zName);
2ac50 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2ac60 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72  3ExprCollSeq(Par
2ac70 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2ac80 20 2a 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65   *pExpr);.CollSe
2ac90 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4e 4e  q *sqlite3ExprNN
2aca0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2acb0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
2acc0 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
2acd0 45 78 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68  ExprCollSeqMatch
2ace0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78  (Parse*,Expr*,Ex
2acf0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
2ad00 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
2ad10 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50  eToken(Parse *pP
2ad20 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  arse, Expr*, con
2ad30 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  st Token*, int);
2ad40 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2ad50 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69  prAddCollateStri
2ad60 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ng(Parse*,Expr*,
2ad70 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78  const char*);.Ex
2ad80 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53  pr *sqlite3ExprS
2ad90 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a  kipCollate(Expr*
2ada0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
2adb0 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  eckCollSeq(Parse
2adc0 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a   *, CollSeq *);.
2add0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2ade0 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65  ObjectName(Parse
2adf0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2ae00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2ae10 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71  dbeSetChanges(sq
2ae20 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69  lite3 *, int);.i
2ae30 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  nt sqlite3AddInt
2ae40 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
2ae50 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  t sqlite3SubInt6
2ae60 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2ae70 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
2ae80 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2ae90 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
2aea0 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
2aeb0 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e  ITE_ENABLE_8_3_N
2aec0 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65  AMES.void sqlite
2aed0 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e  3FileSuffix3(con
2aee0 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29  st char*, char*)
2aef0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2af00 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
2af10 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a  ix3(X,Y).#endif.
2af20 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  u8 sqlite3GetBoo
2af30 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  lean(const char 
2af40 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76  *z,u8);..const v
2af50 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  oid *sqlite3Valu
2af60 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61  eText(sqlite3_va
2af70 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  lue*, u8);.int s
2af80 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
2af90 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2afa0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2afb0 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71  e3ValueSetStr(sq
2afc0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e  lite3_value*, in
2afd0 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c  t, const void *,
2afe0 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  u8,.            
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
2b000 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
2b010 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
2b020 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61  tNull(sqlite3_va
2b030 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  lue*);.void sqli
2b040 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
2b050 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
2b060 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
2b070 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
2b080 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66  ite3 *);.#ifndef
2b090 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
2b0a0 31 36 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  16.char *sqlite3
2b0b0 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
2b0c0 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
2b0d0 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69   int, u8);.#endi
2b0e0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  f.int sqlite3Val
2b0f0 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74  ueFromExpr(sqlit
2b100 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38  e3 *, Expr *, u8
2b110 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
2b120 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lue **);.void sq
2b130 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
2b140 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f  ffinity(sqlite3_
2b150 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29  value *, u8, u8)
2b160 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2b170 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78  _AMALGAMATION.ex
2b180 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2b190 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2b1a0 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  OpcodeProperty[]
2b1b0 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63  ;.extern const c
2b1c0 68 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49  har sqlite3StrBI
2b1d0 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  NARY[];.extern c
2b1e0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2b1f0 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
2b200 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
2b210 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2b220 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
2b230 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
2b240 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
2b250 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
2b260 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
2b270 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
2b280 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
2b290 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63  fig;.extern Func
2b2a0 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42  DefHash sqlite3B
2b2b0 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b  uiltinFunctions;
2b2c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b2d0 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20  OMIT_WSD.extern 
2b2e0 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69  int sqlite3Pendi
2b2f0 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23  ngByte;.#endif.#
2b300 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2b310 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2b320 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2b330 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2b340 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61  qlite3Reindex(Pa
2b350 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2b360 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2b370 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e  te3AlterFunction
2b380 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
2b390 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
2b3a0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2b3b0 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  cList*, Token*);
2b3c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
2b3d0 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67  oken(const unsig
2b3e0 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20  ned char *, int 
2b3f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b400 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73  NestedParse(Pars
2b410 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2b420 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
2b430 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
2b440 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69  dStatements(sqli
2b450 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2b460 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28  e3CodeSubselect(
2b470 50 61 72 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20  Parse*, Expr *, 
2b480 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2b490 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
2b4a0 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
2b4b0 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
2b4c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2b4d0 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d  lectWrongNumTerm
2b4e0 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50  sError(Parse *pP
2b4f0 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29  arse, Select *p)
2b500 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
2b510 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
2b520 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2b530 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2b540 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2b550 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2b560 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
2b570 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
2b580 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
2b590 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65  olveExprListName
2b5a0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
2b5b0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  ExprList*);.void
2b5c0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
2b5d0 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65  electNames(Parse
2b5e0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
2b5f0 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
2b600 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
2b610 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73  lfReference(Pars
2b620 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78  e*,Table*,int,Ex
2b630 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  pr*,ExprList*);.
2b640 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2b650 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
2b660 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2b670 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
2b680 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2b690 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
2b6a0 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
2b6b0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
2b6c0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2b6d0 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
2b6e0 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
2b6f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2b700 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
2b710 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
2b720 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  ist *);.CollSeq 
2b730 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
2b740 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
2b750 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
2b760 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
2b770 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
2b780 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38  (const char*, u8
2b790 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b7a0 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
2b7b0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2b7c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
2b7d0 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
2b7e0 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74  syHandler*);.int
2b7f0 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
2b800 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
2b810 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
2b820 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
2b830 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2b840 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
2b850 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
2b860 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
2b870 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
2b880 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
2b890 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
2b8a0 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
2b8b0 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
2b8c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2b8d0 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
2b8e0 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
2b8f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2b900 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
2b910 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
2b920 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
2b930 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
2b940 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
2b950 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
2b960 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
2b970 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
2b980 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
2b990 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
2b9a0 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
2b9b0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2b9c0 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
2b9d0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
2b9e0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
2b9f0 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
2ba00 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2ba10 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
2ba20 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2ba30 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
2ba40 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
2ba50 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2ba60 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
2ba70 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65  e3KeyInfoIsWrite
2ba80 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  able(KeyInfo*);.
2ba90 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2baa0 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
2bab0 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
2bac0 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
2bad0 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28  void *,.  void (
2bae0 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2baf0 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
2bb00 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
2bb10 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2bb20 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2bb30 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f  e3_value **), vo
2bb40 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2bb50 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63  ontext*),.  Func
2bb60 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
2bb70 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20  tructor.);.void 
2bb80 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28  sqlite3OomFault(
2bb90 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2bba0 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28  sqlite3OomClear(
2bbb0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2bbc0 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71  qlite3ApiExit(sq
2bbd0 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b  lite3 *db, int);
2bbe0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
2bbf0 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72  TempDatabase(Par
2bc00 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  se *);..void sql
2bc10 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
2bc20 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69  (StrAccum*, sqli
2bc30 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74  te3*, char*, int
2bc40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2bc50 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
2bc60 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  nd(StrAccum*,con
2bc70 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76  st char*,int);.v
2bc80 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2bc90 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72  cumAppendAll(Str
2bca0 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
2bcb0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2bcc0 33 41 70 70 65 6e 64 43 68 61 72 28 53 74 72 41  3AppendChar(StrA
2bcd0 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b  ccum*,int,char);
2bce0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74  .char *sqlite3St
2bcf0 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72  rAccumFinish(Str
2bd00 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
2bd10 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73  lite3StrAccumRes
2bd20 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  et(StrAccum*);.v
2bd30 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2bd40 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74  tDestInit(Select
2bd50 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  Dest*,int,int);.
2bd60 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65  Expr *sqlite3Cre
2bd70 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71  ateColumnExpr(sq
2bd80 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74  lite3 *, SrcList
2bd90 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a   *, int, int);..
2bda0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
2bdb0 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65  upRestart(sqlite
2bdc0 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69  3_backup *);.voi
2bdd0 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55  d sqlite3BackupU
2bde0 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61  pdate(sqlite3_ba
2bdf0 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f  ckup *, Pgno, co
2be00 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e  nst u8 *);..#ifn
2be10 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2be20 53 55 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c  SUBQUERY.int sql
2be30 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28  ite3ExprCheckIN(
2be40 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2be50 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2be60 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49  qlite3ExprCheckI
2be70 4e 28 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b  N(x,y) SQLITE_OK
2be80 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2be90 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2bea0 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69  AT3_OR_STAT4.voi
2beb0 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
2bec0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
2bed0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
2bee0 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a  4ProbeSetValue(.
2bef0 20 20 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78      Parse*,Index
2bf00 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  *,UnpackedRecord
2bf10 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74  **,Expr*,int,int
2bf20 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
2bf30 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f  te3Stat4ValueFro
2bf40 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78  mExpr(Parse*, Ex
2bf50 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33  pr*, u8, sqlite3
2bf60 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20  _value**);.void 
2bf70 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
2bf80 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
2bf90 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  cord*);.int sqli
2bfa0 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73  te3Stat4Column(s
2bfb0 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76  qlite3*, const v
2bfc0 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  oid*, int, int, 
2bfd0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2bfe0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e  ;.char sqlite3In
2bff0 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  dexColumnAffinit
2c000 79 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65  y(sqlite3*, Inde
2c010 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  x*, int);.#endif
2c020 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
2c030 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d  rface to the LEM
2c040 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72  ON-generated par
2c050 73 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ser.*/.#ifndef S
2c060 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
2c070 4f 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  ON.  void *sqlit
2c080 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f  e3ParserAlloc(vo
2c090 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 20 20  id*(*)(u64));.  
2c0a0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2c0b0 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
2c0c0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23  id(*)(void*));.#
2c0d0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2c0e0 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20  e3Parser(void*, 
2c0f0 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73  int, Token, Pars
2c100 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52  e*);.#ifdef YYTR
2c110 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48  ACKMAXSTACKDEPTH
2c120 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61  .  int sqlite3Pa
2c130 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f  rserStackPeak(vo
2c140 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f  id*);.#endif..vo
2c150 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f  id sqlite3AutoLo
2c160 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  adExtensions(sql
2c170 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20  ite3*);.#ifndef 
2c180 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
2c190 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69  _EXTENSION.  voi
2c1a0 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  d sqlite3CloseEx
2c1b0 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
2c1c0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2c1d0 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  ne sqlite3CloseE
2c1e0 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e  xtensions(X).#en
2c1f0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
2c200 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2c210 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c  CACHE.  void sql
2c220 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61  ite3TableLock(Pa
2c230 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  rse *, int, int,
2c240 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   u8, const char 
2c250 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
2c260 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ine sqlite3Table
2c270 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a  Lock(v,w,x,y,z).
2c280 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2c290 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74  QLITE_TEST.  int
2c2a0 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28   sqlite3Utf8To8(
2c2b0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b  unsigned char*);
2c2c0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2c2d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2c2e0 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
2c2f0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  ne sqlite3VtabCl
2c300 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65  ear(Y).#  define
2c310 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
2c320 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  (X,Y) SQLITE_OK.
2c330 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2c340 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29  3VtabRollback(X)
2c350 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2c360 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a  e3VtabCommit(X).
2c370 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2c380 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
2c390 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  0.#  define sqli
2c3a0 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23  te3VtabLock(X).#
2c3b0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2c3c0 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20  VtabUnlock(X).# 
2c3d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2c3e0 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29  tabUnlockList(X)
2c3f0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2c400 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
2c410 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f  X, Y, Z) SQLITE_
2c420 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
2c430 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c  ite3GetVTable(X,
2c440 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29  Y)  ((VTable*)0)
2c450 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73  .#else.   void s
2c460 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
2c470 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
2c480 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  le*);.   void sq
2c490 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e  lite3VtabDisconn
2c4a0 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ect(sqlite3 *db,
2c4b0 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69   Table *p);.   i
2c4c0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  nt sqlite3VtabSy
2c4d0 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  nc(sqlite3 *db, 
2c4e0 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73  Vdbe*);.   int s
2c4f0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
2c500 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ck(sqlite3 *db);
2c510 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2c520 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65  tabCommit(sqlite
2c530 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20  3 *db);.   void 
2c540 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
2c550 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
2c560 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
2c570 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  lock(VTable *);.
2c580 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2c590 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71  tabUnlockList(sq
2c5a0 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20  lite3*);.   int 
2c5b0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
2c5c0 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  oint(sqlite3 *, 
2c5d0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f  int, int);.   vo
2c5e0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  id sqlite3VtabIm
2c5f0 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a  portErrmsg(Vdbe*
2c600 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29  , sqlite3_vtab*)
2c610 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c  ;.   VTable *sql
2c620 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71  ite3GetVTable(sq
2c630 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
2c640 0a 20 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69  .   Module *sqli
2c650 74 65 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64  te3VtabCreateMod
2c660 75 6c 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65  ule(.     sqlite
2c670 33 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63  3*,.     const c
2c680 68 61 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74  har*,.     const
2c690 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a   sqlite3_module*
2c6a0 2c 0a 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20  ,.     void*,.  
2c6b0 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a     void(*)(void*
2c6c0 29 0a 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e  ).   );.#  defin
2c6d0 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
2c6e0 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e  ync(db) ((db)->n
2c6f0 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29  VTrans>0 && (db)
2c700 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65  ->aVTrans==0).#e
2c710 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2c720 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
2c730 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f  leInit(Parse*,Mo
2c740 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dule*);.void sql
2c750 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
2c760 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69  sTableClear(sqli
2c770 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  te3*,Module*);.v
2c780 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
2c790 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73  akeWritable(Pars
2c7a0 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  e*,Table*);.void
2c7b0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
2c7c0 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  nParse(Parse*, T
2c7d0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
2c7e0 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
2c7f0 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e  d sqlite3VtabFin
2c800 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ishParse(Parse*,
2c810 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2c820 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69  qlite3VtabArgIni
2c830 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
2c840 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78  sqlite3VtabArgEx
2c850 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b  tend(Parse*, Tok
2c860 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2c870 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
2c880 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
2c890 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61  onst char *, cha
2c8a0 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  r **);.int sqlit
2c8b0 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63  e3VtabCallConnec
2c8c0 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  t(Parse*, Table*
2c8d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2c8e0 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71  abCallDestroy(sq
2c8f0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2c900 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
2c910 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2c920 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62  (sqlite3 *, VTab
2c930 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  le *);.FuncDef *
2c940 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c  sqlite3VtabOverl
2c950 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  oadFunction(sqli
2c960 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20  te3 *,FuncDef*, 
2c970 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29  int nArg, Expr*)
2c980 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
2c990 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71  validFunction(sq
2c9a0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
2c9b0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
2c9c0 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74  **);.sqlite3_int
2c9d0 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75  64 sqlite3StmtCu
2c9e0 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65  rrentTime(sqlite
2c9f0 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  3_context*);.int
2ca00 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61   sqlite3VdbePara
2ca10 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a  meterIndex(Vdbe*
2ca20 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  , const char*, i
2ca30 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2ca40 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
2ca50 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c  (sqlite3_stmt *,
2ca60 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29   sqlite3_stmt *)
2ca70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
2ca80 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a  rserReset(Parse*
2ca90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2caa0 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a  prepare(Vdbe*);.
2cab0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2cac0 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28  ListCheckLength(
2cad0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2cae0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2caf0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2cb00 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f  3BinaryCompareCo
2cb10 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45  llSeq(Parse *, E
2cb20 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a  xpr *, Expr *);.
2cb30 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49  int sqlite3TempI
2cb40 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71  nMemory(const sq
2cb50 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63  lite3*);.const c
2cb60 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
2cb70 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29  nalModename(int)
2cb80 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2cb90 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
2cba0 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
2cbb0 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  t(sqlite3*, int,
2cbc0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   int, int*, int*
2cbd0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2cbe0 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76  WalDefaultHook(v
2cbf0 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
2cc00 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2cc10 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
2cc20 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20  QLITE_OMIT_CTE. 
2cc30 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69   With *sqlite3Wi
2cc40 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74  thAdd(Parse*,Wit
2cc50 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  h*,Token*,ExprLi
2cc60 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  st*,Select*);.  
2cc70 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
2cc80 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
2cc90 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73  With*);.  void s
2cca0 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 50  qlite3WithPush(P
2ccb0 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38  arse*, With*, u8
2ccc0 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  );.#else.#define
2ccd0 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
2cce0 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20  (x,y,z).#define 
2ccf0 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
2cd00 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f  e(x,y).#endif../
2cd10 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
2cd20 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  or functions in 
2cd30 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74  fkey.c. All of t
2cd40 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65  hese are replace
2cd50 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61  d by.** no-op ma
2cd60 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52  cros if OMIT_FOR
2cd70 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69  EIGN_KEY is defi
2cd80 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ned. In this cas
2cd90 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20  e no foreign.** 
2cda0 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  key functionalit
2cdb0 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
2cdc0 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  If OMIT_TRIGGER 
2cdd0 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a  is defined but.*
2cde0 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  * OMIT_FOREIGN_K
2cdf0 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20  EY is not, only 
2ce00 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  some of the func
2ce10 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65  tions are no-ope
2ce20 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61  d. In.** this ca
2ce30 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  se foreign keys 
2ce40 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20  are parsed, but 
2ce50 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f  no other functio
2ce60 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f  nality is.** pro
2ce70 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65  vided (enforceme
2ce80 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61  nt of FK constra
2ce90 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68  ints requires th
2cea0 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73  e triggers sub-s
2ceb0 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21  ystem)..*/.#if !
2cec0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2ced0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
2cee0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2cef0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2cf00 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
2cf10 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20  FkCheck(Parse*, 
2cf20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2cf30 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
2cf40 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72  void sqlite3FkDr
2cf50 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
2cf60 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65  SrcList *, Table
2cf70 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2cf80 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73  e3FkActions(Pars
2cf90 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
2cfa0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a  List*, int, int*
2cfb0 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
2cfc0 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
2cfd0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2cfe0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33  int*, int);.  u3
2cff0 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  2 sqlite3FkOldma
2d000 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  sk(Parse*, Table
2d010 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69  *);.  FKey *sqli
2d020 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
2d030 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a  Table *);.#else.
2d040 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2d050 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63  3FkActions(a,b,c
2d060 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
2d070 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  e sqlite3FkCheck
2d080 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
2d090 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2d0a0 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63  kDropTable(a,b,c
2d0b0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2d0c0 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62  te3FkOldmask(a,b
2d0d0 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64  )         0.  #d
2d0e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
2d0f0 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29  equired(a,b,c,d)
2d100 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
2d110 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
2d120 63 65 73 28 61 29 20 20 20 20 20 20 20 20 30 0a  ces(a)        0.
2d130 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
2d140 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2d150 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71  GN_KEY.  void sq
2d160 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71  lite3FkDelete(sq
2d170 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29  lite3 *, Table*)
2d180 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
2d190 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72  kLocateIndex(Par
2d1a0 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a  se*,Table*,FKey*
2d1b0 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b  ,Index**,int**);
2d1c0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2d1d0 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
2d1e0 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20  (a,b).  #define 
2d1f0 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
2d200 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a  ndex(a,b,c,d,e).
2d210 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
2d220 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
2d230 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
2d240 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
2d250 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
2d260 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2d270 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
2d280 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
2d290 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
2d2a0 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
2d2b0 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
2d2c0 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
2d2d0 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
2d2e0 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
2d2f0 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
2d300 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
2d310 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
2d320 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
2d330 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a  ITE_UNTESTABLE.*
2d340 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64  * is not defined
2d350 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
2d360 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
2d370 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
2d380 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  inBenignMalloc(v
2d390 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  oid);.  void sql
2d3a0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
2d3b0 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  loc(void);.#else
2d3c0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2d3d0 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
2d3e0 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20  loc().  #define 
2d3f0 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
2d400 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a  Malloc().#endif.
2d410 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72  ./*.** Allowed r
2d420 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
2d430 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  m sqlite3FindInI
2d440 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  ndex().*/.#defin
2d450 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44  e IN_INDEX_ROWID
2d460 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53          1   /* S
2d470 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64 20  earch the rowid 
2d480 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
2d490 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2d4a0 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32 20  _EPH          2 
2d4b0 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65    /* Search an e
2d4c0 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20  phemeral b-tree 
2d4d0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2d4e0 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20  DEX_INDEX_ASC   
2d4f0 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67   3   /* Existing
2d500 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47   index ASCENDING
2d510 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2d520 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20  NDEX_INDEX_DESC 
2d530 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    4   /* Existin
2d540 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49  g index DESCENDI
2d550 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  NG */.#define IN
2d560 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20  _INDEX_NOOP     
2d570 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61      5   /* No ta
2d580 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55  ble available. U
2d590 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a  se comparisons *
2d5a0 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  /./*.** Allowed 
2d5b0 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33 72  flags for the 3r
2d5c0 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
2d5d0 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2d5e0 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  x()..*/.#define 
2d5f0 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b  IN_INDEX_NOOP_OK
2d600 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
2d610 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f  OK to return IN_
2d620 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64  INDEX_NOOP */.#d
2d630 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d  efine IN_INDEX_M
2d640 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30 30  EMBERSHIP  0x000
2d650 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  2  /* IN operato
2d660 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65  r used for membe
2d670 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64  rship test */.#d
2d680 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c  efine IN_INDEX_L
2d690 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30 30  OOP        0x000
2d6a0 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  4  /* IN operato
2d6b0 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70  r used as a loop
2d6c0 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46   */.int sqlite3F
2d6d0 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65  indInIndex(Parse
2d6e0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c   *, Expr *, u32,
2d6f0 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69   int*, int*);..i
2d700 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2d710 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66  lOpen(sqlite3_vf
2d720 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  s *, const char 
2d730 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  *, sqlite3_file 
2d740 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
2d750 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2d760 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73  Size(sqlite3_vfs
2d770 20 2a 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64   *);.#if defined
2d780 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41  (SQLITE_ENABLE_A
2d790 54 4f 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a 20  TOMIC_WRITE) \. 
2d7a0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2d7b0 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41  E_ENABLE_BATCH_A
2d7c0 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a 20 20 69  TOMIC_WRITE).  i
2d7d0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2d7e0 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f  lCreate(sqlite3_
2d7f0 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  file *);.#endif.
2d800 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
2d810 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71  nalIsInMemory(sq
2d820 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a  lite3_file *p);.
2d830 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a  void sqlite3MemJ
2d840 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2d850 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69  e3_file *);..voi
2d860 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  d sqlite3ExprSet
2d870 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50  HeightAndFlags(P
2d880 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2d890 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49  pr *p);.#if SQLI
2d8a0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
2d8b0 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  H>0.  int sqlite
2d8c0 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
2d8d0 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69  t(Select *);.  i
2d8e0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  nt sqlite3ExprCh
2d8f0 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a  eckHeight(Parse*
2d900 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  , int);.#else.  
2d910 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
2d920 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2d930 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73  x) 0.  #define s
2d940 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
2d950 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69  eight(x,y).#endi
2d960 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65  f..u32 sqlite3Ge
2d970 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a  t4byte(const u8*
2d980 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2d990 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32  ut4byte(u8*, u32
2d9a0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
2d9b0 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
2d9c0 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71  NOTIFY.  void sq
2d9d0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
2d9e0 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
2d9f0 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20  , sqlite3 *);.  
2da00 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2da10 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73  ectionUnlocked(s
2da20 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76  qlite3 *db);.  v
2da30 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2da40 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69  ctionClosed(sqli
2da50 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a  te3 *db);.#else.
2da60 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2da70 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
2da80 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ed(x,y).  #defin
2da90 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
2daa0 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20  ionUnlocked(x). 
2dab0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2dac0 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
2dad0 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  (x).#endif..#ifd
2dae0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2daf0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61    void sqlite3Pa
2db00 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c  rserTrace(FILE*,
2db10 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66   char *);.#endif
2db20 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ../*.** If the S
2db30 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54  QLITE_ENABLE IOT
2db40 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e  RACE exists then
2db50 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
2db60 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49  able.** sqlite3I
2db70 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e  oTrace is a poin
2db80 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d  ter to a printf-
2db90 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65  like routine use
2dba0 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f  d to.** print I/
2dbb0 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67  O tracing messag
2dbc0 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  es..*/.#ifdef SQ
2dbd0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
2dbe0 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  ACE.# define IOT
2dbf0 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c  RACE(A)  if( sql
2dc00 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73  ite3IoTrace ){ s
2dc10 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b  qlite3IoTrace A;
2dc20 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65   }.  void sqlite
2dc30 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
2dc40 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41  Vdbe*);.SQLITE_A
2dc50 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e  PI SQLITE_EXTERN
2dc60 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44   void (SQLITE_CD
2dc70 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72  ECL *sqlite3IoTr
2dc80 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
2dc90 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ,...);.#else.# d
2dca0 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
2dcb0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2dcc0 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
2dcd0 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2dce0 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20   These routines 
2dcf0 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  are available fo
2dd00 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62  r the mem2.c deb
2dd10 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c  ugging memory al
2dd20 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e  locator.** only.
2dd30 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20    They are used 
2dd40 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64  to verify that d
2dd50 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22  ifferent "types"
2dd60 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c   of memory.** al
2dd70 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72  locations are pr
2dd80 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62  operly tracked b
2dd90 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a  y the system..**
2dda0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2ddb0 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74  bugSetType() set
2ddc0 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20  s the "type" of 
2ddd0 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f  an allocation to
2dde0 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d   one of.** the M
2ddf0 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20  EMTYPE_* macros 
2de00 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20  defined below.  
2de10 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65  The type must be
2de20 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a   a bitmask with.
2de30 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20  ** a single bit 
2de40 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  set..**.** sqlit
2de50 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2de60 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
2de70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62   if any of the b
2de80 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
2de90 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
2dea0 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
2deb0 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
2dec0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2ded0 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71  SetType()..** sq
2dee0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2def0 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64  Type() is intend
2df00 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64  ed for use insid
2df10 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
2df20 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ments..**.** sql
2df30 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
2df40 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
2df50 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  e if none of the
2df60 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
2df70 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
2df80 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
2df90 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
2dfa0 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
2dfb0 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a  ugSetType()..**.
2dfc0 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d  ** Perhaps the m
2dfd0 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f  ost important po
2dfe0 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65  int is the diffe
2dff0 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45  rence between ME
2e000 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e  MTYPE_HEAP.** an
2e010 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  d MEMTYPE_LOOKAS
2e020 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f  IDE.  If an allo
2e030 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50  cation is MEMTYP
2e040 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61  E_LOOKASIDE, tha
2e050 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69  t means.** it mi
2e060 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c  ght have been al
2e070 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61  located by looka
2e080 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65  side, except the
2e090 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a   allocation was.
2e0a0 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20  ** too large or 
2e0b0 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c  lookaside was al
2e0c0 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20  ready full.  It 
2e0d0 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
2e0e0 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61  verify.** that a
2e0f0 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20  llocations that 
2e100 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2e110 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f  satisfied by loo
2e120 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a  kaside are not.*
2e130 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f  * passed back to
2e140 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
2e150 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20  ree() routines. 
2e160 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73   Asserts such as
2e170 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20   the.** example 
2e180 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64  above are placed
2e190 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b   on the non-look
2e1a0 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
2e1b0 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a  tines to verify.
2e1c0 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  ** this constrai
2e1d0 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  nt..**.** All of
2e1e0 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66   this is no-op f
2e1f0 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20  or a production 
2e200 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20  build.  It only 
2e210 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c  comes into.** pl
2e220 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49  ay when the SQLI
2e230 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70  TE_MEMDEBUG comp
2e240 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
2e250 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64  is used..*/.#ifd
2e260 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
2e270 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
2e280 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2e290 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
2e2a0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
2e2b0 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75  gHasType(void*,u
2e2c0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
2e2d0 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2e2e0 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65  void*,u8);.#else
2e2f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2e300 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2e310 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  (X,Y)  /* no-op 
2e320 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  */.# define sqli
2e330 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2e340 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66  pe(X,Y)  1.# def
2e350 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
2e360 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20  bugNoType(X,Y)  
2e370 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e   1.#endif.#defin
2e380 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20  e MEMTYPE_HEAP  
2e390 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65       0x01  /* Ge
2e3a0 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63  neral heap alloc
2e3b0 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
2e3c0 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  e MEMTYPE_LOOKAS
2e3d0 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65  IDE  0x02  /* He
2e3e0 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ap that might ha
2e3f0 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64  ve been lookasid
2e400 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  e */.#define MEM
2e410 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20  TYPE_PCACHE     
2e420 30 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61  0x04  /* Page ca
2e430 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  che allocations 
2e440 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64  */../*.** Thread
2e450 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f  ing interface.*/
2e460 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
2e470 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30  WORKER_THREADS>0
2e480 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
2e490 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54  adCreate(SQLiteT
2e4a0 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29  hread**,void*(*)
2e4b0 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a  (void*),void*);.
2e4c0 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
2e4d0 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65  dJoin(SQLiteThre
2e4e0 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65  ad*, void**);.#e
2e4f0 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
2e500 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2e510 44 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20  DBPAGE_VTAB) || 
2e520 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
2e530 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33  EST).int sqlite3
2e540 44 62 70 61 67 65 52 65 67 69 73 74 65 72 28 73  DbpageRegister(s
2e550 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66  qlite3*);.#endif
2e560 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2e570 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41  ITE_ENABLE_DBSTA
2e580 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e  T_VTAB) || defin
2e590 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
2e5a0 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74 61  int sqlite3Dbsta
2e5b0 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65  tRegister(sqlite
2e5c0 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  3*);.#endif..int
2e5d0 20 73 71 6c 69 74 65 33 45 78 70 72 56 65 63 74   sqlite3ExprVect
2e5e0 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78  orSize(Expr *pEx
2e5f0 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
2e600 45 78 70 72 49 73 56 65 63 74 6f 72 28 45 78 70  ExprIsVector(Exp
2e610 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20  r *pExpr);.Expr 
2e620 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69  *sqlite3VectorFi
2e630 65 6c 64 53 75 62 65 78 70 72 28 45 78 70 72 2a  eldSubexpr(Expr*
2e640 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
2e650 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65 63 74  lite3ExprForVect
2e660 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45  orField(Parse*,E
2e670 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  xpr*,int);.void 
2e680 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72  sqlite3VectorErr
2e690 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78  orMsg(Parse*, Ex
2e6a0 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  pr*);..#ifndef S
2e6b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
2e6c0 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63  LEOPTION_DIAGS.c
2e6d0 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69  onst char **sqli
2e6e0 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  te3CompileOption
2e6f0 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23  s(int *pnOpt);.#
2e700 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a  endif..#endif /*
2e710 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a   SQLITEINT_H */.