/ Hex Artifact Content
Login

Artifact 066ad0db3ad85d9042657ca56e63f87b7d022d39bfd744501ec963cd6a5f692c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
6dd0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
6de0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
6df0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
6e00: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
6e10: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
6e20: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
6e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
6e40: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6e50: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
6e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
6e70: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
6e80: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
6e90: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ea0: 5f 5f 61 72 6d 5f 5f 29 20 20 7c 7c 20 64 65 66  __arm__)  || def
6eb0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 36 34 29 0a 23  ined(_M_ARM64).#
6ec0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ed0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
6ee0: 33 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65  34.# elif define
6ef0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
6f00: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a  efined(__ppc__).
6f10: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6f20: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6f30: 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  321.# else.#   d
6f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6f50: 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66  EORDER 0.# endif
6f60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
6f70: 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33  TE_BYTEORDER==43
6f80: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
6f90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6fa0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6fb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
6fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6fd0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
6fe0: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c  LITE_UTF16BE.#el
6ff0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
7000: 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69  DER==1234.# defi
7010: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
7020: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
7030: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7040: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
7050: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7060: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
7070: 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65  6LE.#else.# ifde
7080: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
7090: 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e  ATION.  const in
70a0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31  t sqlite3one = 1
70b0: 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72  ;.# else.  exter
70c0: 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  n const int sqli
70d0: 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a  te3one;.# endif.
70e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70f0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
7100: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
7110: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
7120: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7130: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
7140: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
7150: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
7160: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
7170: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
7180: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
7190: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
71a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
71b0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
71c0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
71d0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
71e0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
71f0: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
7200: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
7210: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
7220: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
7230: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
7240: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
7250: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
7260: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
7270: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
7280: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
7290: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
72a0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
72b0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
72c0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61  /*.** Round up a
72d0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e   number to the n
72e0: 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69  ext larger multi
72f0: 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20  ple of 8.  This 
7300: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f  is used.** to fo
7310: 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e  rce 8-byte align
7320: 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61  ment on 64-bit a
7330: 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f  rchitectures..*/
7340: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28  .#define ROUND8(
7350: 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26  x)     (((x)+7)&
7360: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  ~7)../*.** Round
7370: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61   down to the nea
7380: 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rest multiple of
7390: 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f   8.*/.#define RO
73a0: 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29  UNDDOWN8(x) ((x)
73b0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65  &~7)../*.** Asse
73c0: 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e  rt that the poin
73d0: 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64  ter X is aligned
73e0: 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   to an 8-byte bo
73f0: 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a  undary.  This.**
7400: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f   macro is used o
7410: 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72  nly within asser
7420: 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68  t() to verify th
7430: 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73  at the code gets
7440: 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e  .** all alignmen
7450: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63  t restrictions c
7460: 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78  orrect..**.** Ex
7470: 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f  cept, if SQLITE_
7480: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
7490: 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64  ALLOC is defined
74a0: 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e  , then the.** un
74b0: 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28  derlying malloc(
74c0: 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ) implementation
74d0: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
74e0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
74f0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
7500: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
7510: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
7520: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
7530: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
7540: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
7550: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
7560: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
7570: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
7580: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
7590: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
75a0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
75b0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
75c0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
75d0: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
75e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
75f0: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
7600: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
7610: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
7620: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
7630: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
7640: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
7650: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
7660: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7670: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7690: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
76a0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
76b0: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
76c0: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
76d0: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
76e0: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
76f0: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
7700: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
7710: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64  itionals.h>.#end
7720: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
7730: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7740: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
7750: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
7760: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
7770: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
7780: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
7790: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
77a0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
77b0: 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66  _sun) \.  || def
77c0: 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f  ined(__FreeBSD__
77d0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
77e0: 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a  (__DragonFly__).
77f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
7800: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7810: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
7820: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
7830: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
7840: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7850: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
7860: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
7870: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
7880: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
7890: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
78a0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
78b0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
78c0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
78d0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
78e0: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
78f0: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
7900: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
7910: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
7920: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7930: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7940: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7950: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7960: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7970: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7980: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7990: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
79a0: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
79b0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
79c0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
79d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
79e0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
79f0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
7a00: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
7a10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7a20: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7a30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7a40: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7a50: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7a60: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7a70: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7a80: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7a90: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7aa0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7ab0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7ac0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7ad0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
7ae0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
7af0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7b00: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7b10: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7b20: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7b30: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7b40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7b50: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7b60: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7b70: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7b80: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7b90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ba0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
7bc0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
7bd0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
7be0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
7bf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
7c00: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
7c10: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7c20: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7c30: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7c40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7c50: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
7c60: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
7c70: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
7c80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
7c90: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
7ca0: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
7cb0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7cc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7cd0: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
7ce0: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
7cf0: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
7d00: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
7d10: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
7d20: 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndle..**.** The 
7d30: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7d40: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
7d50: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
7d60: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
7d70: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
7d80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7d90: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
7da0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
7db0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
7dc0: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
7dd0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
7de0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
7e10: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
7e20: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
7e30: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
7e40: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
7e50: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
7e60: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
7e70: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
7e80: 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f  xBusyHandler)(vo
7e90: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
7ea0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
7eb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73   */.  void *pBus
7ec0: 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  yArg;           
7ed0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7ee0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
7ef0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
7f00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7f20: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7f30: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
7f40: 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69  */.  u8 bExtraFi
7f50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
7f60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64         /* Includ
7f70: 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61  e sqlite3_file a
7f80: 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a  s callback arg *
7f90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7fa0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7fb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7fc0: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7fd0: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7fe0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7ff0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
8000: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
8010: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
8020: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
8030: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
8040: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
8050: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
8060: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
8070: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
8080: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
8090: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
80a0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
80b0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
80c0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80d0: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
80e0: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
80f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
8100: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
8110: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
8120: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
8130: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
8140: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
8150: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
8160: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
8170: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
8180: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
8190: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
81a0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
81b0: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
81c0: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
81d0: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
81e0: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
81f0: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
8200: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
8210: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
8220: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
8230: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
8240: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
8250: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
8260: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
8270: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
8280: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
8290: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
82a0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
82b0: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
82c0: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
82d0: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
82e0: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
82f0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
8300: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
8310: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
8320: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
8330: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
8340: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
8350: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
8360: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
8370: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
8380: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
8390: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
83a0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
83b0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
83c0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
83d0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
83e0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
83f0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
8400: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
8410: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
8420: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
8430: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
8440: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
8450: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
8460: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
8470: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
8480: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
8490: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
84a0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
84b0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
84c0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
84d0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
84e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
84f0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
8500: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
8510: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
8520: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
8530: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
8540: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
8550: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
8560: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
8570: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
8580: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
8590: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
85a0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
85b0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
85c0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
85d0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
85e0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
85f0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
8600: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
8610: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8620: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
8630: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
8640: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
8650: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
8660: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
8670: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8680: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8690: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
86a0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
86b0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
86c0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
86d0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
86e0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
86f0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
8700: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8710: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
8720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8730: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
8740: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
8750: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
8760: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
8770: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8780: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8790: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
87a0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
87b0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
87c0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
87d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
87e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
87f0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
8800: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8810: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
8820: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
8830: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
8840: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
8850: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
8860: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
8870: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8880: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
88a0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
88b0: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
88c0: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
88d0: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
88e0: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
88f0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
8900: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8910: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
8920: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
8930: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
8940: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
8950: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
8960: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
8970: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8980: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8990: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
89a0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
89b0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
89c0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
89d0: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
89e0: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
89f0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
8a00: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8a10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
8a20: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
8a30: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
8a40: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
8a50: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
8a60: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
8a70: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8a80: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8a90: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8aa0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
8ab0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
8ac0: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
8ad0: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
8ae0: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
8af0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
8b00: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8b10: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
8b20: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
8b30: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
8b40: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
8b50: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
8b60: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
8b70: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8b80: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8b90: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8ba0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
8bb0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
8bc0: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
8bd0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
8be0: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
8bf0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
8c00: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8c10: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
8c20: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
8c30: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
8c40: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
8c50: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
8c60: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8c70: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8c80: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8c90: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8ca0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
8cb0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
8cc0: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
8cd0: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
8ce0: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
8cf0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
8d00: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8d10: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8d20: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
8d30: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
8d50: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
8d60: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
8d70: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8d80: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8d90: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8da0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
8db0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
8dc0: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
8dd0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
8de0: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
8df0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
8e00: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8e10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
8e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
8e40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
8e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
8e90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
8ea0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
8eb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8ec0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
8ed0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ee0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
8ef0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
8f00: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
8f10: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
8f20: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
8f30: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
8f40: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f50: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
8f60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8f70: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
8f80: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
8fa0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
8fb0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
8fc0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
8fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fe0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
9000: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
9010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9020: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
9030: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61  RenameToken Rena
9060: 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  meToken;.typedef
9070: 20 73 74 72 75 63 74 20 46 61 73 74 50 72 6e 67   struct FastPrng
9080: 20 46 61 73 74 50 72 6e 67 3b 0a 74 79 70 65 64   FastPrng;.typed
9090: 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74  ef struct RowSet
90a0: 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66   RowSet;.typedef
90b0: 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e   struct Savepoin
90c0: 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70  t Savepoint;.typ
90d0: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
90e0: 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64  ct Select;.typed
90f0: 65 66 20 73 74 72 75 63 74 20 53 51 4c 69 74 65  ef struct SQLite
9100: 54 68 72 65 61 64 20 53 51 4c 69 74 65 54 68 72  Thread SQLiteThr
9110: 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ead;.typedef str
9120: 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53  uct SelectDest S
9130: 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64  electDest;.typed
9140: 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  ef struct SrcLis
9150: 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64  t SrcList;.typed
9160: 65 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  ef struct sqlite
9170: 33 5f 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20  3_str StrAccum; 
9180: 2f 2a 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61  /* Internal alia
9190: 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74  s for sqlite3_st
91a0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  r */.typedef str
91b0: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
91c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
91d0: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
91e0: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
91f0: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
9200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9210: 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65  TreeView TreeVie
9220: 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  w;.typedef struc
9230: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
9240: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
9250: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
9260: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
9270: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
9280: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
9290: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
92a0: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
92b0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
92c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 70  ypedef struct Up
92d0: 73 65 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70  sert Upsert;.typ
92e0: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
92f0: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
9300: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
9310: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
9320: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
9330: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
9340: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
9350: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70  o WhereInfo;.typ
9360: 65 64 65 66 20 73 74 72 75 63 74 20 57 69 6e 64  edef struct Wind
9370: 6f 77 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64  ow Window;.typed
9380: 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57  ef struct With W
9390: 69 74 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ith;.../*.** The
93a0: 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
93b0: 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
93c0: 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
93d0: 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
93e0: 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
93f0: 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
9400: 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
9410: 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
9420: 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
9430: 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
9440: 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
9450: 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
9460: 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
9470: 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
9480: 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
9490: 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66   on ix86..*/.#if
94a0: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41  def SQLITE_BITMA
94b0: 53 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65  SK_TYPE.  typede
94c0: 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
94d0: 5f 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23  _TYPE Bitmask;.#
94e0: 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
94f0: 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64  64 Bitmask;.#end
9500: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  if../*.** The nu
9510: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20  mber of bits in 
9520: 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53  a Bitmask.  "BMS
9530: 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b  " means "BitMask
9540: 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Size"..*/.#defi
9550: 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73  ne BMS  ((int)(s
9560: 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38  izeof(Bitmask)*8
9570: 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20  ))../*.** A bit 
9580: 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a  in a Bitmask.*/.
9590: 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28  #define MASKBIT(
95a0: 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29  n)   (((Bitmask)
95b0: 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65  1)<<(n)).#define
95c0: 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28   MASKBIT32(n) ((
95d0: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29  (unsigned int)1)
95e0: 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41  <<(n)).#define A
95f0: 4c 4c 42 49 54 53 20 20 20 20 20 20 28 28 42 69  LLBITS      ((Bi
9600: 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20  tmask)-1)../* A 
9610: 56 4c 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63  VList object rec
9620: 6f 72 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62  ords a mapping b
9630: 65 74 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72  etween parameter
9640: 73 2f 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64  s/variables/wild
9650: 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20  cards.** in the 
9660: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73  SQL statement (s
9670: 75 63 68 20 61 73 20 24 61 62 63 2c 20 40 70 71  uch as $abc, @pq
9680: 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20  r, or :xyz) and 
9690: 74 68 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76  the integer.** v
96a0: 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61  ariable number a
96b0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
96c0: 68 61 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20  hat parameter.  
96d0: 53 65 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64  See the format d
96e0: 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e  escription.** on
96f0: 20 74 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73   the sqlite3VLis
9700: 74 41 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66  tAdd() routine f
9710: 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74  or more informat
9720: 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73  ion.  A VList is
9730: 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20   really.** just 
9740: 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65  an array of inte
9750: 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  gers..*/.typedef
9760: 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a   int VList;../*.
9770: 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e  ** Defer sourcin
9780: 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72  g vdbe.h and btr
9790: 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72  ee.h until after
97a0: 20 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a   the "u8" and.**
97b0: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
97c0: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
97d0: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
97e0: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
97f0: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
9800: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
9810: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
9820: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
9830: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
9840: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
9850: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
9860: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
9870: 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a  #include "os.h".
9880: 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e  #include "mutex.
9890: 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54  h"../* The SQLIT
98a0: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20  E_EXTRA_DURABLE 
98b0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
98c0: 69 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20  ion used to set 
98d0: 74 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73  the default.** s
98e0: 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69  ynchronous setti
98f0: 6e 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74  ng to EXTRA.  It
9900: 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75   is no longer su
9910: 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64  pported..*/.#ifd
9920: 65 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f  ef SQLITE_EXTRA_
9930: 44 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e  DURABLE.# warnin
9940: 67 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46  g Use SQLITE_DEF
9950: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9960: 3d 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51  =3 instead of SQ
9970: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
9980: 4c 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  LE.# define SQLI
9990: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
99a0: 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a  RONOUS 3.#endif.
99b0: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73  ./*.** Default s
99c0: 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c  ynchronous level
99d0: 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
99e0: 61 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61  at (for historca
99f0: 6c 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50  l reasons) the P
9a00: 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AGER_SYNCHRONOUS
9a10: 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72  _* macros differ
9a20: 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  .** from the SQL
9a30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9a40: 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79  HRONOUS value by
9a50: 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20   1..**.**       
9a60: 20 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52      PAGER_SYNCHR
9a70: 4f 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46 41  ONOUS       DEFA
9a80: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
9a90: 2a 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20 20  **   OFF        
9aa0: 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20     1            
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a               0.*
9ac0: 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20  *   NORMAL      
9ad0: 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20    2             
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a              1.**
9af0: 20 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20     FULL         
9b00: 20 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20   3              
9b10: 20 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20             2.** 
9b20: 20 20 45 58 54 52 41 20 20 20 20 20 20 20 20 20    EXTRA         
9b30: 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  4               
9b40: 20 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a            3.**.*
9b50: 2a 20 54 68 65 20 22 50 52 41 47 4d 41 20 73 79  * The "PRAGMA sy
9b60: 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65  nchronous" state
9b70: 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74  ment also uses t
9b80: 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75  he zero-based nu
9b90: 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68  mbers..** In oth
9ba0: 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65  er words, the ze
9bb0: 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73  ro-based numbers
9bc0: 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c   are used for al
9bd0: 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72  l external inter
9be0: 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65  faces.** and the
9bf0: 20 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65   one-based value
9c00: 73 20 61 72 65 20 75 73 65 64 20 69 6e 74 65 72  s are used inter
9c10: 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65  nally..*/.#ifnde
9c20: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
9c30: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64  _SYNCHRONOUS.# d
9c40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
9c50: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9c60: 20 32 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   2.#endif.#ifnde
9c70: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
9c80: 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  _WAL_SYNCHRONOUS
9c90: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9ca0: 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e  _DEFAULT_WAL_SYN
9cb0: 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f  CHRONOUS SQLITE_
9cc0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9cd0: 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  OUS.#endif../*.*
9ce0: 2a 20 53 74 61 74 65 20 6f 66 20 61 20 73 69 6d  * State of a sim
9cf0: 70 6c 65 20 50 52 4e 47 20 75 73 65 64 20 66 6f  ple PRNG used fo
9d00: 72 20 74 68 65 20 70 65 72 2d 63 6f 6e 6e 65 63  r the per-connec
9d10: 74 69 6f 6e 20 61 6e 64 20 70 65 72 2d 70 61 67  tion and per-pag
9d20: 65 72 0a 2a 2a 20 70 73 65 75 64 6f 2d 72 61 6e  er.** pseudo-ran
9d30: 64 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72  dom number gener
9d40: 61 74 6f 72 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  ators..*/.struct
9d50: 20 46 61 73 74 50 72 6e 67 20 7b 0a 20 20 75 6e   FastPrng {.  un
9d60: 73 69 67 6e 65 64 20 69 6e 74 20 78 2c 20 79 3b  signed int x, y;
9d70: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
9d80: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
9d90: 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20   be accessed by 
9da0: 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e  the system is an
9db0: 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
9dc0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
9dd0: 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20  ructure.  There 
9de0: 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f  are normally two
9df0: 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74   of these struct
9e00: 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73  ures.** in the s
9e10: 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61  qlite.aDb[] arra
9e20: 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68  y.  aDb[0] is th
9e30: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
9e40: 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b  file and.** aDb[
9e50: 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61  1] is the databa
9e60: 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
9e70: 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74  hold temporary t
9e80: 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e  ables.  Addition
9e90: 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20  al.** databases 
9ea0: 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e  may be attached.
9eb0: 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a  .*/.struct Db {.
9ec0: 20 20 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65    char *zDbSName
9ed0: 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
9ee0: 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65 2e  f this database.
9ef0: 20 28 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e   (schema name, n
9f00: 6f 74 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a  ot filename) */.
9f10: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
9f20: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
9f30: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
9f40: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
9f50: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
9f60: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
9f70: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
9f80: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
9f90: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75  a to disk */.  u
9fa0: 38 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20  8 bSyncSet;     
9fb0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22      /* True if "
9fc0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
9fd0: 75 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72  us=N" has been r
9fe0: 75 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  un */.  Schema *
9ff0: 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
a000: 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62  Pointer to datab
a010: 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73  ase schema (poss
a020: 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a  ibly shared) */.
a030: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
a040: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
a050: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
a060: 20 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61   stores a databa
a070: 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  se schema..**.**
a080: 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a   Most Schema obj
a090: 65 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61  ects are associa
a0a0: 74 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65  ted with a Btree
a0b0: 2e 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e  .  The exception
a0c0: 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d   is.** the Schem
a0d0: 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64  a for the TEMP d
a0e0: 61 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33  atabaes (sqlite3
a0f0: 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69  .aDb[1]) which i
a100: 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e  s free-standing.
a110: 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61  .** In shared ca
a120: 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67  che mode, a sing
a130: 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  le Schema object
a140: 20 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62   can be shared b
a150: 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74  y multiple.** Bt
a160: 72 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20  rees that refer 
a170: 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65  to the same unde
a180: 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20  rlying BtShared 
a190: 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63  object..**.** Sc
a1a0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
a1b0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
a1c0: 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20  eallocated when 
a1d0: 74 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74  the last Btree t
a1e0: 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  hat.** reference
a1f0: 73 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f  s them is destro
a200: 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20  yed.   The TEMP 
a210: 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c  Schema is manual
a220: 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73  ly freed by.** s
a230: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a  qlite3_close()..
a240: 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75  *.** A thread mu
a250: 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20  st be holding a 
a260: 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72  mutex on the cor
a270: 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65  responding Btree
a280: 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20   in order.** to 
a290: 61 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f  access Schema co
a2a0: 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70  ntent.  This imp
a2b0: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68  lies that the th
a2c0: 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62  read must also b
a2d0: 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d  e.** holding a m
a2e0: 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69  utex on the sqli
a2f0: 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  te3 connection p
a300: 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73  ointer that owns
a310: 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46   the Btree..** F
a320: 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61  or a TEMP Schema
a330: 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65  , only the conne
a340: 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72  ction mutex is r
a350: 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75  equired..*/.stru
a360: 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e  ct Schema {.  in
a370: 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b  t schema_cookie;
a380: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73     /* Database s
a390: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75  chema version nu
a3a0: 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69  mber for this fi
a3b0: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e  le */.  int iGen
a3c0: 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20  eration;     /* 
a3d0: 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  Generation count
a3e0: 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64  er.  Incremented
a3f0: 20 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67   with each chang
a400: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48  e */.  Hash tblH
a410: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
a420: 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65  ll tables indexe
a430: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a440: 61 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20  ash idxHash;    
a450: 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65      /* All (name
a460: 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78  d) indices index
a470: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
a480: 48 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20  Hash trigHash;  
a490: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67       /* All trig
a4a0: 67 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20  gers indexed by 
a4b0: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66  name */.  Hash f
a4c0: 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f  keyHash;       /
a4d0: 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  * All foreign ke
a4e0: 79 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64  ys by referenced
a4f0: 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
a500: 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b   Table *pSeqTab;
a510: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c        /* The sql
a520: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
a530: 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49  le used by AUTOI
a540: 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38  NCREMENT */.  u8
a550: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
a560: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72     /* Schema for
a570: 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20  mat version for 
a580: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75  this file */.  u
a590: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
a5a0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
a5b0: 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69  ding used by thi
a5c0: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
a5d0: 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b  u16 schemaFlags;
a5e0: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73       /* Flags as
a5f0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
a600: 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
a610: 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20  nt cache_size;  
a620: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a630: 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e   pages to use in
a640: 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b   the cache */.};
a650: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
a660: 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
a670: 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
a680: 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
a690: 74 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d  the.** Db.pSchem
a6a0: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
a6b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  */.#define DbHas
a6c0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a6d0: 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49      (((D)->aDb[I
a6e0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
a6f0: 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  aFlags&(P))==(P)
a700: 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41  ).#define DbHasA
a710: 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  nyProperty(D,I,P
a720: 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d  )  (((D)->aDb[I]
a730: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a740: 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  Flags&(P))!=0).#
a750: 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70  define DbSetProp
a760: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
a770: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
a780: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
a790: 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62  |=(P).#define Db
a7a0: 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c  ClearProperty(D,
a7b0: 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b  I,P)   (D)->aDb[
a7c0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
a7d0: 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  maFlags&=~(P)../
a7e0: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
a7f0: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
a800: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
a810: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
a820: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
a830: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
a840: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
a850: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
a860: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
a870: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
a880: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
a890: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
a8a0: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
a8b0: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
a8c0: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
a8d0: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
a8e0: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
a8f0: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
a900: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
a910: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
a920: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
a930: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
a940: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
a950: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
a960: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
a970: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
a980: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
a990: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
a9a0: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
a9b0: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
a9c0: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
a9d0: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
a9e0: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
a9f0: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
aa00: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
aa10: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
aa20: 74 65 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tes) */.#define 
aa30: 44 42 5f 52 65 73 65 74 57 61 6e 74 65 64 20 20  DB_ResetWanted  
aa40: 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 52 65     0x0008  /* Re
aa50: 73 65 74 20 74 68 65 20 73 63 68 65 6d 61 20 77  set the schema w
aa60: 68 65 6e 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d  hen nSchemaLock=
aa70: 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  =0 */../*.** The
aa80: 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65   number of diffe
aa90: 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68  rent kinds of th
aaa0: 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65  ings that can be
aab0: 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e   limited.** usin
aac0: 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69  g the sqlite3_li
aad0: 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e  mit() interface.
aae0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
aaf0: 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49  TE_N_LIMIT (SQLI
ab00: 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f  TE_LIMIT_WORKER_
ab10: 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a  THREADS+1)../*.*
ab20: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
ab30: 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66  oc is a set of f
ab40: 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72  ixed-size buffer
ab50: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  s that can be us
ab60: 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79  ed.** to satisfy
ab70: 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74   small transient
ab80: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
ab90: 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20  on requests for 
aba0: 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63  objects.** assoc
abb0: 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72  iated with a par
abc0: 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
abd0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68   connection.  Th
abe0: 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b  e use of.** look
abf0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f  aside malloc pro
ac00: 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63  vides a signific
ac10: 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ant performance 
ac20: 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28  enhancement.** (
ac30: 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61  approx 10%) by a
ac40: 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73  voiding numerous
ac50: 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71   malloc/free req
ac60: 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73  uests while pars
ac70: 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65  ing.** SQL state
ac80: 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ments..**.** The
ac90: 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63   Lookaside struc
aca0: 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69  ture holds confi
acb0: 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  guration informa
acc0: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a  tion about the.*
acd0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
ace0: 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45  oc subsystem.  E
acf0: 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65  ach available me
ad00: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
ad10: 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73  in.** the lookas
ad20: 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73  ide subsystem is
ad30: 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e   stored on a lin
ad40: 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b  ked list of Look
ad50: 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a  asideSlot.** obj
ad60: 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b  ects..**.** Look
ad70: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
ad80: 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77  s are only allow
ad90: 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74  ed for objects t
ada0: 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74  hat are associat
adb0: 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72  ed.** with a par
adc0: 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
add0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65   connection.  He
ade0: 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f  nce, schema info
adf0: 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a  rmation cannot.*
ae00: 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c  * be stored in l
ae10: 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65  ookaside because
ae20: 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   in shared cache
ae30: 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61   mode the schema
ae40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
ae50: 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  is shared by mul
ae60: 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63  tiple database c
ae70: 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65  onnections.  The
ae80: 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61  refore, while pa
ae90: 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20  rsing.** schema 
aea0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
aeb0: 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62   Lookaside.bEnab
aec0: 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61  led flag is clea
aed0: 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c  red so that.** l
aee0: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
aef0: 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65  ions are not use
af00: 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74  d to construct t
af10: 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  he schema object
af20: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f  s..*/.struct Loo
af30: 6b 61 73 69 64 65 20 7b 0a 20 20 75 33 32 20 62  kaside {.  u32 b
af40: 44 69 73 61 62 6c 65 3b 20 20 20 20 20 20 20 20  Disable;        
af50: 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61     /* Only opera
af60: 74 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  te the lookaside
af70: 20 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20   when zero */.  
af80: 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20  u16 sz;         
af90: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
afa0: 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20 69  of each buffer i
afb0: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20  n bytes */.  u8 
afc0: 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20  bMalloced;      
afd0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
afe0: 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20  pStart obtained 
aff0: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  from sqlite3_mal
b000: 6c 6f 63 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e  loc() */.  u32 n
b010: 53 6c 6f 74 3b 20 20 20 20 20 20 20 20 20 20 20  Slot;           
b020: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b030: 6c 6f 6f 6b 61 73 69 64 65 20 73 6c 6f 74 73 20  lookaside slots 
b040: 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75  allocated */.  u
b050: 33 32 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20  32 anStat[3];   
b060: 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74         /* 0: hit
b070: 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73  s.  1: size miss
b080: 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73  es.  2: full mis
b090: 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69  ses */.  Lookasi
b0a0: 64 65 53 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20  deSlot *pInit;  
b0b0: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 62 75 66 66   /* List of buff
b0c0: 65 72 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  ers not previous
b0d0: 6c 79 20 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f  ly used */.  Loo
b0e0: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65  kasideSlot *pFre
b0f0: 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  e;   /* List of 
b100: 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72  available buffer
b110: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74  s */.  void *pSt
b120: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
b130: 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20  * First byte of 
b140: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
b150: 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64   space */.  void
b160: 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
b170: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
b180: 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76  e past end of av
b190: 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f  ailable space */
b1a0: 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .};.struct Looka
b1b0: 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f  sideSlot {.  Loo
b1c0: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78  kasideSlot *pNex
b1d0: 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75  t;    /* Next bu
b1e0: 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74  ffer in the list
b1f0: 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73   of free buffers
b200: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
b210: 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 62  hash table for b
b220: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
b230: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28   definitions.  (
b240: 41 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  Application-defi
b250: 6e 65 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ned.** functions
b260: 20 75 73 65 20 61 20 72 65 67 75 6c 61 72 20 74   use a regular t
b270: 61 62 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d 20  able table from 
b280: 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48  hash.h.).**.** H
b290: 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66  ash each FuncDef
b2a0: 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20   structure into 
b2b0: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
b2c0: 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73  efHash.a[] slots
b2d0: 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20  ..** Collisions 
b2e0: 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44  are on the FuncD
b2f0: 65 66 2e 75 2e 70 48 61 73 68 20 63 68 61 69 6e  ef.u.pHash chain
b300: 2e 20 20 55 73 65 20 74 68 65 20 53 51 4c 49 54  .  Use the SQLIT
b310: 45 5f 46 55 4e 43 5f 48 41 53 48 28 29 0a 2a 2a  E_FUNC_HASH().**
b320: 20 6d 61 63 72 6f 20 74 6f 20 63 6f 6d 70 75 74   macro to comput
b330: 65 20 61 20 68 61 73 68 20 6f 6e 20 74 68 65 20  e a hash on the 
b340: 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 2e 0a 2a  function name..*
b350: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b360: 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33  _FUNC_HASH_SZ 23
b370: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48  .struct FuncDefH
b380: 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20  ash {.  FuncDef 
b390: 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48  *a[SQLITE_FUNC_H
b3a0: 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f  ASH_SZ];       /
b3b0: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72  * Hash table for
b3c0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b   functions */.};
b3d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b3e0: 46 55 4e 43 5f 48 41 53 48 28 43 2c 4c 29 20 28  FUNC_HASH(C,L) (
b3f0: 28 28 43 29 2b 28 4c 29 29 25 53 51 4c 49 54 45  ((C)+(L))%SQLITE
b400: 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 29 0a 0a  _FUNC_HASH_SZ)..
b410: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
b420: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
b430: 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74  N./*.** Informat
b440: 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20  ion held in the 
b450: 22 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61  "sqlite3" databa
b460: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  se connection ob
b470: 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a  ject and used.**
b480: 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20   to manage user 
b490: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a  authentication..
b4a0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
b4b0: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
b4c0: 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  th sqlite3_usera
b4d0: 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69  uth;.struct sqli
b4e0: 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20  te3_userauth {. 
b4f0: 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20   u8 authLevel;  
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b510: 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e  * Current authen
b520: 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a  tication level *
b530: 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b  /.  int nAuthPW;
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
b560: 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65   zAuthPW in byte
b570: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  s */.  char *zAu
b580: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b590: 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64       /* Password
b5a0: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
b5b0: 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20  icate */.  char 
b5c0: 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20  *zAuthUser;     
b5d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72           /* User
b5e0: 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75   name used to au
b5f0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b  thenticate */.};
b600: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
b610: 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f  ues for sqlite3_
b620: 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76  userauth.authLev
b630: 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  el */.#define UA
b640: 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20  UTH_Unknown     
b650: 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  0     /* Authent
b660: 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20  ication not yet 
b670: 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69  checked */.#defi
b680: 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20  ne UAUTH_Fail   
b690: 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73       1     /* Us
b6a0: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
b6b0: 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66  n failed */.#def
b6c0: 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20  ine UAUTH_User  
b6d0: 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41        2     /* A
b6e0: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
b6f0: 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f  a normal user */
b700: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41  .#define UAUTH_A
b710: 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20  dmin       3    
b720: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b730: 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74  d as an administ
b740: 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e  rator */../* Fun
b750: 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79  ctions used only
b760: 20 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69   by user authori
b770: 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a  zation logic */.
b780: 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41  int sqlite3UserA
b790: 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63  uthTable(const c
b7a0: 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
b7b0: 65 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c  e3UserAuthCheckL
b7c0: 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ogin(sqlite3*,co
b7d0: 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a  nst char*,u8*);.
b7e0: 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72  void sqlite3User
b7f0: 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33  AuthInit(sqlite3
b800: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
b810: 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65  CryptFunc(sqlite
b820: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
b830: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
b840: 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
b850: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b860: 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  CATION */../*.**
b870: 20 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65   typedef for the
b880: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63   authorization c
b890: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
b8a0: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
b8b0: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b8c0: 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66  CATION.  typedef
b8d0: 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78   int (*sqlite3_x
b8e0: 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  auth)(void*,int,
b8f0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b900: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b910: 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ar*,.           
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b930: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
b940: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b950: 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69  else.  typedef i
b960: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
b970: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
b980: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b990: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b9a0: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9c0: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a    const char*);.
b9d0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
b9e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
b9f0: 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69  ECATED./* This i
ba00: 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54  s an extra SQLIT
ba10: 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68  E_TRACE macro th
ba20: 61 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65  at indicates "le
ba30: 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a  gacy" tracing.**
ba40: 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66   in the style of
ba50: 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
ba60: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
ba70: 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20  TE_TRACE_LEGACY 
ba80: 20 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20           0x40   
ba90: 20 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67    /* Use the leg
baa0: 61 63 79 20 78 54 72 61 63 65 20 2a 2f 0a 23 64  acy xTrace */.#d
bab0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
bac0: 43 45 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20  CE_XPROFILE     
bad0: 20 20 20 30 78 38 30 20 20 20 20 20 2f 2a 20 55     0x80     /* U
bae0: 73 65 20 74 68 65 20 6c 65 67 61 63 79 20 78 50  se the legacy xP
baf0: 72 6f 66 69 6c 65 20 2a 2f 0a 23 65 6c 73 65 0a  rofile */.#else.
bb00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
bb10: 52 41 43 45 5f 4c 45 47 41 43 59 20 20 20 20 20  RACE_LEGACY     
bb20: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
bb30: 51 4c 49 54 45 5f 54 52 41 43 45 5f 58 50 52 4f  QLITE_TRACE_XPRO
bb40: 46 49 4c 45 20 20 20 20 20 20 20 20 30 0a 23 65  FILE        0.#e
bb50: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
bb60: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
bb70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bb80: 5f 54 52 41 43 45 5f 4e 4f 4e 4c 45 47 41 43 59  _TRACE_NONLEGACY
bb90: 5f 4d 41 53 4b 20 20 30 78 30 66 20 20 20 20 20  _MASK  0x0f     
bba0: 2f 2a 20 4e 6f 72 6d 61 6c 20 66 6c 61 67 73 20  /* Normal flags 
bbb0: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  */.../*.** Each 
bbc0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
bbd0: 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ion is an instan
bbe0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
bbf0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
bc00: 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  /.struct sqlite3
bc10: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73   {.  sqlite3_vfs
bc20: 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20   *pVfs;         
bc30: 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61     /* OS Interfa
bc40: 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56  ce */.  struct V
bc50: 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
bc60: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
bc70: 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20   active virtual 
bc80: 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f  machines */.  Co
bc90: 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c  llSeq *pDfltColl
bca0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
bcb0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
bcc0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42  ting sequence (B
bcd0: 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69  INARY) */.  sqli
bce0: 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78  te3_mutex *mutex
bcf0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
bd00: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f  nection mutex */
bd10: 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20  .  Db *aDb;     
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd30: 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73   /* All backends
bd40: 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20   */.  int nDb;  
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd60: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
bd70: 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e   backends curren
bd80: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20  tly in use */.  
bd90: 75 33 32 20 6d 44 62 46 6c 61 67 73 3b 20 20 20  u32 mDbFlags;   
bda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bdb0: 20 66 6c 61 67 73 20 72 65 63 6f 72 64 69 6e 67   flags recording
bdc0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 65 20   internal state 
bdd0: 2a 2f 0a 20 20 75 36 34 20 66 6c 61 67 73 3b 20  */.  u64 flags; 
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdf0: 20 20 20 2f 2a 20 66 6c 61 67 73 20 73 65 74 74     /* flags sett
be00: 61 62 6c 65 20 62 79 20 70 72 61 67 6d 61 73 2e  able by pragmas.
be10: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
be20: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
be40: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
be50: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
be60: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
be70: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
be80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
be90: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
bea0: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33   setting */.  u3
beb0: 32 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20  2 nSchemaLock;  
bec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
bed0: 6f 20 6e 6f 74 20 72 65 73 65 74 20 74 68 65 20  o not reset the 
bee0: 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d  schema when non-
bef0: 7a 65 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  zero */.  unsign
bf00: 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73  ed int openFlags
bf10: 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  ;       /* Flags
bf20: 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74   passed to sqlit
bf30: 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a  e3_vfs.xOpen() *
bf40: 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b  /.  int errCode;
bf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf60: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
bf70: 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c   error code (SQL
bf80: 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20  ITE_*) */.  int 
bf90: 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20  errMask;        
bfa0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72            /* & r
bfb0: 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68  esult codes with
bfc0: 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74   this before ret
bfd0: 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  urning */.  int 
bfe0: 69 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20  iSysErrno;      
bff0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
c000: 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61  no value from la
c010: 73 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20  st system error 
c020: 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c  */.  u16 dbOptFl
c030: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
c040: 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65     /* Flags to e
c050: 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70  nable/disable op
c060: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20  timizations */. 
c070: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c090: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
c0a0: 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d  */.  u8 autoComm
c0b0: 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
c0c0: 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63     /* The auto-c
c0d0: 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20  ommit flag. */. 
c0e0: 20 75 38 20 62 43 6f 6e 63 75 72 72 65 6e 74 3b   u8 bConcurrent;
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c100: 2a 20 43 75 72 72 65 6e 74 20 74 72 61 6e 73 61  * Current transa
c110: 63 74 69 6f 6e 20 69 73 20 22 43 4f 4e 43 55 52  ction is "CONCUR
c120: 52 45 4e 54 22 20 2a 2f 0a 20 20 75 38 20 74 65  RENT" */.  u8 te
c130: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
c140: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66           /* 1: f
c150: 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a  ile 2: memory 0:
c160: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
c170: 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
c180: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
c190: 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73  rue if we have s
c1a0: 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69  een a malloc fai
c1b0: 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42 65  lure */.  u8 bBe
c1c0: 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20  nignMalloc;     
c1d0: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
c1e0: 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20 69  t require OOMs i
c1f0: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 64  f true */.  u8 d
c200: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
c210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
c220: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
c230: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
c240: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
c250: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
c260: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
c270: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
c280: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
c290: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
c2a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c2b0: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
c2c0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
c2d0: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
c2e0: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
c2f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
c300: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
c310: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
c320: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
c330: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
c340: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
c350: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
c360: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
c370: 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54 72  a TS */.  u8 mTr
c380: 61 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ace;            
c390: 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f 20          /* zero 
c3a0: 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f 54  or more SQLITE_T
c3b0: 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20 20  RACE flags */.  
c3c0: 75 38 20 6e 6f 53 68 61 72 65 64 43 61 63 68 65  u8 noSharedCache
c3d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
c3e0: 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61 72   True if no shar
c3f0: 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e 64  ed-cache backend
c400: 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45 78  s */.  u8 nSqlEx
c410: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
c420: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c430: 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71 6c  f pending OP_Sql
c440: 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  Exec opcodes */.
c450: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
c460: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
c470: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
c480: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
c490: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4b0: 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65    /* Magic numbe
c4c0: 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62  r for detect lib
c4d0: 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20  rary misuse */. 
c4e0: 20 46 61 73 74 50 72 6e 67 20 73 50 72 6e 67 3b   FastPrng sPrng;
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c500: 2a 20 53 74 61 74 65 20 6f 66 20 74 68 65 20 70  * State of the p
c510: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 50 52  er-connection PR
c520: 4e 47 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  NG */.  int nCha
c530: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
c540: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
c550: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
c560: 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  e3_changes() */.
c570: 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e    int nTotalChan
c580: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
c590: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
c5a0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74  d by sqlite3_tot
c5b0: 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  al_changes() */.
c5c0: 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c    int aLimit[SQL
c5d0: 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20  ITE_N_LIMIT];   
c5e0: 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69  /* Limits */.  i
c5f0: 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61  nt nMaxSorterMma
c600: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
c610: 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  Maximum size of 
c620: 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62  regions mapped b
c630: 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74  y sorter */.  st
c640: 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74  ruct sqlite3Init
c650: 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49  Info {      /* I
c660: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
c670: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
c680: 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
c690: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
c6a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
c6b0: 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65  page of table be
c6c0: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
c6d0: 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20  */.    u8 iDb;  
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6f0: 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66     /* Which db f
c700: 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69  ile is being ini
c710: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
c720: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
c730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
c740: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
c750: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
c760: 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6f 72  .    unsigned or
c770: 70 68 61 6e 54 72 69 67 67 65 72 20 3a 20 31 3b  phanTrigger : 1;
c780: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
c790: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
c7a0: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
c7b0: 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f     unsigned impo
c7c0: 73 74 65 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f  sterTable : 1; /
c7d0: 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d  * Building an im
c7e0: 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a  poster table */.
c7f0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 6f      unsigned reo
c800: 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20  penMemdb : 1;   
c810: 2f 2a 20 41 54 54 41 43 48 20 69 73 20 72 65 61  /* ATTACH is rea
c820: 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20 75 73 69  lly a reopen usi
c830: 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d 20  ng MemDB */.  } 
c840: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
c850: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
c860: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c870: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
c880: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
c890: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c8b0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c8c0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c8d0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
c8e0: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c900: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c910: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c920: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
c930: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
c940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c950: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
c960: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
c970: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
c980: 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20  nVDestroy;      
c990: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c9a0: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50  ber of active OP
c9b0: 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  _VDestroy operat
c9c0: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ions */.  int nE
c9d0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
c9e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c9f0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
ca00: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
ca10: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
ca20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
ca30: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
ca40: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
ca50: 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28    int (*xTrace)(
ca60: 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c  u32,void*,void*,
ca70: 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54  void*);     /* T
ca80: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
ca90: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
caa0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cac0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
cad0: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
cae0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
caf0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
cb00: 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69  .  void (*xProfi
cb10: 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  le)(void*,const 
cb20: 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20  char*,u64);  /* 
cb30: 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69  Profiling functi
cb40: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  on */.  void *pP
cb50: 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20  rofileArg;      
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb70: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
cb80: 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f   profile functio
cb90: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 76 6f  n */.#endif.  vo
cba0: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbc0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
cbd0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
cbe0: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d   */.  int (*xCom
cbf0: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
cc00: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
cc10: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
cc20: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
cc30: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
cc40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
cc50: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
cc60: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
cc70: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
cc80: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
cc90: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
cca0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
ccb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
ccc0: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
ccd0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
cce0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
ccf0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
cd00: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
cd10: 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  4);.#ifdef SQLIT
cd20: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
cd30: 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a  TE_HOOK.  void *
cd40: 70 50 72 65 55 70 64 61 74 65 41 72 67 3b 20 20  pPreUpdateArg;  
cd50: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
cd60: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50 72   argument to xPr
cd70: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
cd80: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 65  */.  void (*xPre
cd90: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
cda0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65 64     /* Registered
cdb0: 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70   using sqlite3_p
cdc0: 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20  reupdate_hook() 
cdd0: 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c  */.    void*,sql
cde0: 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63  ite3*,int,char c
cdf0: 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74  onst*,char const
ce00: 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c  *,sqlite3_int64,
ce10: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20 20  sqlite3_int64.  
ce20: 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a  );.  PreUpdate *
ce30: 70 50 72 65 55 70 64 61 74 65 3b 20 20 20 20 20  pPreUpdate;     
ce40: 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f     /* Context fo
ce50: 72 20 61 63 74 69 76 65 20 70 72 65 2d 75 70 64  r active pre-upd
ce60: 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ate callback */.
ce70: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
ce80: 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
ce90: 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65  E_HOOK */.#ifnde
cea0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
ceb0: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
cec0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
ced0: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
cee0: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
cef0: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
cf00: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
cf10: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
cf20: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
cf30: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
cf40: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
cf50: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
cf60: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
cf70: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
cf80: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
cf90: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
cfa0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
cfb0: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
cfc0: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
cfd0: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
cfe0: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
cff0: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
d000: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
d010: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
d020: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
d030: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
d040: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
d050: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
d060: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
d070: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
d080: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
d090: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
d0a0: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
d0b0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
d0c0: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
d0d0: 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78  TION.  sqlite3_x
d0e0: 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20  auth xAuth;     
d0f0: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
d100: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
d110: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
d120: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
d130: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
d140: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
d150: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
d160: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
d170: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d180: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
d190: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
d1a0: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
d1b0: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
d1c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
d1d0: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
d1e0: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
d1f0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
d200: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
d210: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
d220: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
d230: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
d240: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
d250: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
d260: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
d270: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d280: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
d290: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d2b0: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
d2c0: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
d2d0: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d2f0: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
d300: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
d310: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
d320: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
d330: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
d340: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
d350: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
d360: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
d370: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
d380: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
d390: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
d3a0: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
d3b0: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
d3c0: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20  sconnect;       
d3d0: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
d3e0: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
d3f0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
d400: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73   */.#endif.  Has
d410: 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20  h aFunc;        
d420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
d430: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
d440: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
d450: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
d460: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
d470: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
d480: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
d490: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
d4a0: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
d4b0: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
d4c0: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
d4d0: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
d4e0: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
d4f0: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
d500: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
d510: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
d520: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
d530: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
d540: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
d550: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
d560: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
d570: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
d580: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
d590: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
d5a0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
d5b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d5c0: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
d5d0: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
d5e0: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
d5f0: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
d600: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
d610: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
d620: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
d630: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
d640: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
d650: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
d660: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
d670: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
d680: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
d690: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
d6a0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
d6b0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
d6c0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
d6d0: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
d6f0: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
d700: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
d710: 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66  Free() */.#ifdef
d720: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
d730: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
d740: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
d750: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
d760: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
d770: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
d780: 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74  .  ** mutex, not
d790: 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65   by sqlite3.mute
d7a0: 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64  x. They are used
d7b0: 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69   by code in noti
d7c0: 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  fy.c..  **.  ** 
d7d0: 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f  When X.pUnlockCo
d7e0: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
d7f0: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69  t means that X i
d800: 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20  s waiting for Y 
d810: 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73  to.  ** unlock s
d820: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72  o that it can pr
d830: 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  oceed..  **.  **
d840: 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e   When X.pBlockin
d850: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  gConnection==Y, 
d860: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
d870: 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58  something that X
d880: 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65   tried.  ** trie
d890: 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79  d to do recently
d8a0: 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20   failed with an 
d8b0: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72  SQLITE_LOCKED er
d8c0: 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73  ror due to locks
d8d0: 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e  .  ** held by Y.
d8e0: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  .  */.  sqlite3 
d8f0: 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  *pBlockingConnec
d900: 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74  tion; /* Connect
d910: 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20  ion that caused 
d920: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f  SQLITE_LOCKED */
d930: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c  .  sqlite3 *pUnl
d940: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20  ockConnection;  
d950: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
d960: 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20  ection to watch 
d970: 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20  for unlock */.  
d980: 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67  void *pUnlockArg
d990: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d9a0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
d9b0: 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69  t to xUnlockNoti
d9c0: 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  fy */.  void (*x
d9d0: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f  UnlockNotify)(vo
d9e0: 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a  id **, int);  /*
d9f0: 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63   Unlock notify c
da00: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c  allback */.  sql
da10: 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b  ite3 *pNextBlock
da20: 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  ed;        /* Ne
da30: 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c  xt in list of al
da40: 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63  l blocked connec
da50: 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
da60: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
da70: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
da80: 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72  N.  sqlite3_user
da90: 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20  auth auth;      
daa0: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
dab0: 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  tication informa
dac0: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  tion */.#endif.}
dad0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f  ;../*.** A macro
dae0: 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65   to discover the
daf0: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64   encoding of a d
db00: 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66  atabase..*/.#def
db10: 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64  ine SCHEMA_ENC(d
db20: 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d  b) ((db)->aDb[0]
db30: 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23  .pSchema->enc).#
db40: 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20  define ENC(db)  
db50: 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63        ((db)->enc
db60: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
db70: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
db80: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
db90: 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
dba0: 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
dbb0: 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
dbc0: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
dbd0: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d  FullFSync     ==
dbe0: 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43   PAGER_FULLFSYNC
dbf0: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
dc00: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d  CkptFullFSync ==
dc10: 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c   PAGER_CKPT_FULL
dc20: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
dc30: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
dc40: 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48     == PAGER_CACH
dc50: 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69  E_SPILL.*/.#defi
dc60: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
dc70: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
dc80: 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  001  /* OK to up
dc90: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
dca0: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
dcb0: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
dcc0: 6d 74 20 20 30 78 30 30 30 30 30 30 30 32 20 20  mt  0x00000002  
dcd0: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
dce0: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
dcf0: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
dd00: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
dd10: 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20  es   0x00000004 
dd20: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
dd30: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
dd40: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
dd50: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
dd60: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38        0x00000008
dd70: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
dd80: 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65  ync on the backe
dd90: 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nd */.#define SQ
dda0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
ddb0: 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20  nc  0x00000010  
ddc0: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
ddd0: 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  c for checkpoint
dde0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ddf0: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20  TE_CacheSpill   
de00: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
de10: 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67   OK to spill pag
de20: 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  er cache */.#def
de30: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
de40: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
de50: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
de60: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
de70: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
de80: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
de90: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
dea0: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
deb0: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
dec0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
def0: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
df00: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
df10: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
df40: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
df50: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
df60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
df70: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
df80: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
df90: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
dfa0: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
dfe0: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
dff0: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
e000: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
e010: 73 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20  s   0x00000200  
e020: 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63  /* Do not enforc
e030: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
e040: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
e050: 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
e060: 69 74 20 20 20 30 78 30 30 30 30 30 34 30 30 20  it   0x00000400 
e070: 20 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d 4d 49   /* READ UNCOMMI
e080: 54 54 45 44 20 69 6e 20 73 68 61 72 65 64 2d 63  TTED in shared-c
e090: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
e0a0: 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43  SQLITE_NoCkptOnC
e0b0: 6c 6f 73 65 20 20 30 78 30 30 30 30 30 38 30 30  lose  0x00000800
e0c0: 20 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69    /* No checkpoi
e0d0: 6e 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45  nt on close()/DE
e0e0: 54 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e 65 20  TACH */.#define 
e0f0: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
e100: 64 65 72 20 20 20 30 78 30 30 30 30 31 30 30 30  der   0x00001000
e110: 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f    /* Reverse uno
e120: 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a  rdered SELECTs *
e130: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e140: 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20  _RecTriggers    
e150: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 45  0x00002000  /* E
e160: 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20  nable recursive 
e170: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
e180: 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69  ine SQLITE_Forei
e190: 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 30  gnKeys    0x0000
e1a0: 34 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65  4000  /* Enforce
e1b0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
e1c0: 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65  straints  */.#de
e1d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f  fine SQLITE_Auto
e1e0: 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 30  Index      0x000
e1f0: 30 38 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  08000  /* Enable
e200: 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
e210: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e220: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
e230: 6f 6e 20 20 30 78 30 30 30 31 30 30 30 30 20 20  on  0x00010000  
e240: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
e250: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
e260: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
e270: 78 74 46 75 6e 63 20 20 20 20 30 78 30 30 30 32  xtFunc    0x0002
e280: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
e290: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
e2a0: 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65   SQL func */.#de
e2b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
e2c0: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30 30  leTrigger  0x000
e2d0: 34 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  40000  /* True t
e2e0: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
e2f0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e300: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
e310: 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f     0x00080000  /
e320: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
e330: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
e340: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
e350: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 30  ryOnly      0x00
e360: 31 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  100000  /* Disab
e370: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
e380: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
e390: 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b  QLITE_CellSizeCk
e3a0: 20 20 20 20 20 30 78 30 30 32 30 30 30 30 30 20       0x00200000 
e3b0: 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20   /* Check btree 
e3c0: 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f  cell sizes on lo
e3d0: 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ad */.#define SQ
e3e0: 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a  LITE_Fts3Tokeniz
e3f0: 65 72 20 20 30 78 30 30 34 30 30 30 30 30 20 20  er  0x00400000  
e400: 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74  /* Enable fts3_t
e410: 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23  okenizer(2) */.#
e420: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
e430: 61 62 6c 65 51 50 53 47 20 20 20 20 20 30 78 30  ableQPSG     0x0
e440: 30 38 30 30 30 30 30 20 20 2f 2a 20 51 75 65 72  0800000  /* Quer
e450: 79 20 50 6c 61 6e 6e 65 72 20 53 74 61 62 69 6c  y Planner Stabil
e460: 69 74 79 20 47 75 61 72 61 6e 74 65 65 2a 2f 0a  ity Guarantee*/.
e470: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
e480: 72 69 67 67 65 72 45 51 50 20 20 20 20 20 30 78  riggerEQP     0x
e490: 30 31 30 30 30 30 30 30 20 20 2f 2a 20 53 68 6f  01000000  /* Sho
e4a0: 77 20 74 72 69 67 67 65 72 20 45 58 50 4c 41 49  w trigger EXPLAI
e4b0: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
e4c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
e4d0: 65 73 65 74 44 61 74 61 62 61 73 65 20 20 30 78  esetDatabase  0x
e4e0: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 52 65 73  02000000  /* Res
e4f0: 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
e500: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e510: 45 5f 4c 65 67 61 63 79 41 6c 74 65 72 20 20 20  E_LegacyAlter   
e520: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
e530: 4c 65 67 61 63 79 20 41 4c 54 45 52 20 54 41 42  Legacy ALTER TAB
e540: 4c 45 20 62 65 68 61 76 69 6f 75 72 20 2a 2f 0a  LE behaviour */.
e550: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
e560: 6f 53 63 68 65 6d 61 45 72 72 6f 72 20 20 30 78  oSchemaError  0x
e570: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44 6f 20  08000000  /* Do 
e580: 6e 6f 74 20 72 65 70 6f 72 74 20 73 63 68 65 6d  not report schem
e590: 61 20 70 61 72 73 65 20 65 72 72 6f 72 73 2a 2f  a parse errors*/
e5a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e5b0: 44 65 66 65 6e 73 69 76 65 20 20 20 20 20 20 30  Defensive      0
e5c0: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 49 6e  x10000000  /* In
e5d0: 70 75 74 20 53 51 4c 20 69 73 20 6c 69 6b 65 6c  put SQL is likel
e5e0: 79 20 68 6f 73 74 69 6c 65 20 2a 2f 0a 0a 23 64  y hostile */..#d
e5f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 6f  efine SQLITE_Noo
e600: 70 55 70 64 61 74 65 20 20 20 20 20 30 78 30 31  pUpdate     0x01
e610: 30 30 30 30 30 30 20 20 2f 2a 20 55 50 44 41 54  000000  /* UPDAT
e620: 45 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65  E operations are
e630: 20 6e 6f 2d 6f 70 73 20 2a 2f 0a 2f 2a 20 46 6c   no-ops */./* Fl
e640: 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66  ags used only if
e650: 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 64   debugging */.#d
e660: 65 66 69 6e 65 20 48 49 28 58 29 20 20 28 28 75  efine HI(X)  ((u
e670: 36 34 29 28 58 29 3c 3c 33 32 29 0a 23 69 66 64  64)(X)<<32).#ifd
e680: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
e690: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
e6a0: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 48 49  qlTrace       HI
e6b0: 28 30 78 30 30 30 31 29 20 20 2f 2a 20 44 65 62  (0x0001)  /* Deb
e6c0: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
e6d0: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
e6e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e6f0: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 48 49 28  beListing    HI(
e700: 30 78 30 30 30 32 29 20 20 2f 2a 20 44 65 62 75  0x0002)  /* Debu
e710: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
e720: 42 45 20 70 72 6f 67 73 20 2a 2f 0a 23 64 65 66  BE progs */.#def
e730: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
e740: 72 61 63 65 20 20 20 20 20 20 48 49 28 30 78 30  race      HI(0x0
e750: 30 30 34 29 20 20 2f 2a 20 54 72 75 65 20 74 6f  004)  /* True to
e760: 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63   trace VDBE exec
e770: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
e780: 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f   SQLITE_VdbeAddo
e790: 70 54 72 61 63 65 20 48 49 28 30 78 30 30 30 38  pTrace HI(0x0008
e7a0: 29 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69  )  /* Trace sqli
e7b0: 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63  te3VdbeAddOp() c
e7c0: 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alls */.#define 
e7d0: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20  SQLITE_VdbeEQP  
e7e0: 20 20 20 20 20 20 48 49 28 30 78 30 30 31 30 29        HI(0x0010)
e7f0: 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41    /* Debug EXPLA
e800: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f  IN QUERY PLAN */
e810: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
e820: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
e830: 72 20 73 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61  r sqlite3.mDbFla
e840: 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  gs.*/.#define DB
e850: 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67  FLAG_SchemaChang
e860: 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55  e   0x0001  /* U
e870: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
e880: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
e890: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
e8a0: 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30  PreferBuiltin  0
e8b0: 78 30 30 30 32 20 20 2f 2a 20 50 72 65 66 65 72  x0002  /* Prefer
e8c0: 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e  ence to built-in
e8d0: 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e   funcs */.#defin
e8e0: 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75 6d 20  e DBFLAG_Vacuum 
e8f0: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
e900: 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e 20  /* Currently in 
e910: 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66  a VACUUM */.#def
e920: 69 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d  ine DBFLAG_Schem
e930: 61 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 30 38  aKnownOk  0x0008
e940: 20 20 2f 2a 20 53 63 68 65 6d 61 20 69 73 20 6b    /* Schema is k
e950: 6e 6f 77 6e 20 74 6f 20 62 65 20 76 61 6c 69 64  nown to be valid
e960: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20   */../*.** Bits 
e970: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  of the sqlite3.d
e980: 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20  bOptFlags field 
e990: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79  that are used by
e9a0: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
e9b0: 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c  test_control(SQL
e9c0: 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54  ITE_TESTCTRL_OPT
e9d0: 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20  IMIZATIONS,...) 
e9e0: 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20  interface to.** 
e9f0: 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61  selectively disa
ea00: 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69  ble various opti
ea10: 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64  mizations..*/.#d
ea20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
ea30: 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30  ryFlattener 0x00
ea40: 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c  01   /* Query fl
ea50: 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 20 20 20 20  attening */.    
ea60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea70: 20 20 20 20 20 20 2f 2a 20 20 30 78 30 30 30 32        /*  0x0002
ea80: 20 20 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72     available for
ea90: 20 72 65 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e   reuse */.#defin
eaa0: 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79  e SQLITE_GroupBy
eab0: 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20  Order   0x0004  
eac0: 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65   /* GROUPBY cove
ead0: 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a  r of ORDERBY */.
eae0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
eaf0: 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78  actorOutConst 0x
eb00: 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61  0008   /* Consta
eb10: 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a  nt factoring */.
eb20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
eb30: 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78  istinctOpt    0x
eb40: 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e  0010   /* DISTIN
eb50: 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73  CT using indexes
eb60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
eb70: 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20  TE_CoverIdxScan 
eb80: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f    0x0020   /* Co
eb90: 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61  vering index sca
eba0: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
ebb0: 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a  LITE_OrderByIdxJ
ebc0: 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20  oin 0x0040   /* 
ebd0: 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e  ORDER BY of join
ebe0: 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23  s via index */.#
ebf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
ec00: 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30  ansitive     0x0
ec10: 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74  080   /* Transit
ec20: 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ive constraints 
ec30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ec40: 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20  E_OmitNoopJoin  
ec50: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69   0x0100   /* Omi
ec60: 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20  t unused tables 
ec70: 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66  in joins */.#def
ec80: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
ec90: 4f 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30  OfView    0x0200
eca0: 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d     /* The count-
ecb0: 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61  of-view optimiza
ecc0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
ecd0: 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e  SQLITE_CursorHin
ece0: 74 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f  ts    0x0400   /
ecf0: 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48  * Add OP_CursorH
ed00: 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23  int opcodes */.#
ed10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
ed20: 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30  at34         0x0
ed30: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41  800   /* Use STA
ed40: 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61  T3 or STAT4 data
ed50: 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65 78   */.   /* TH3 ex
ed60: 70 65 63 74 73 20 74 68 65 20 53 74 61 74 33 34  pects the Stat34
ed70: 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74    ^^^^^^ value t
ed80: 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20 44 6f  o be 0x0800.  Do
ed90: 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a 2f  n't change it */
eda0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
edb0: 50 75 73 68 44 6f 77 6e 20 20 20 20 20 20 20 30  PushDown       0
edc0: 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65 20 70  x1000   /* The p
edd0: 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a  ush-down optimiz
ede0: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
edf0: 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79   SQLITE_Simplify
ee00: 4a 6f 69 6e 20 20 20 30 78 32 30 30 30 20 20 20  Join   0x2000   
ee10: 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46 54 20  /* Convert LEFT 
ee20: 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a  JOIN to JOIN */.
ee30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ee40: 6b 69 70 53 63 61 6e 20 20 20 20 20 20 20 30 78  kipScan       0x
ee50: 34 30 30 30 20 20 20 2f 2a 20 53 6b 69 70 2d 73  4000   /* Skip-s
ee60: 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cans */.#define 
ee70: 53 51 4c 49 54 45 5f 50 72 6f 70 61 67 61 74 65  SQLITE_Propagate
ee80: 43 6f 6e 73 74 20 30 78 38 30 30 30 20 20 20 2f  Const 0x8000   /
ee90: 2a 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 70  * The constant p
eea0: 72 6f 70 61 67 61 74 69 6f 6e 20 6f 70 74 20 2a  ropagation opt *
eeb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eec0: 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20  _AllOpts        
eed0: 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20  0xffff   /* All 
eee0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
eef0: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66  ../*.** Macros f
ef00: 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68  or testing wheth
ef10: 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69  er or not optimi
ef20: 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62  zations are enab
ef30: 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e  led or disabled.
ef40: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  .*/.#define Opti
ef50: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
ef60: 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64  (db, mask)  (((d
ef70: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
ef80: 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69  mask))!=0).#defi
ef90: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
efa0: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
efb0: 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74     (((db)->dbOpt
efc0: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30  Flags&(mask))==0
efd0: 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  )../*.** Return 
efe0: 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f  true if it OK to
eff0: 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74   factor constant
f000: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74   expressions int
f010: 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  o the initializa
f020: 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68  tion.** code. Th
f030: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
f040: 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72  Parse object for
f050: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
f060: 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  tor..*/.#define 
f070: 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29  ConstFactorOk(P)
f080: 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61   ((P)->okConstFa
f090: 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  ctor)../*.** Pos
f0a0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
f0b0: 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69   the sqlite.magi
f0c0: 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20  c field..** The 
f0d0: 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61  numbers are obta
f0e0: 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  ined at random a
f0f0: 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69  nd have no speci
f100: 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65  al meaning, othe
f110: 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20  r.** than being 
f120: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e  distinct from on
f130: 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64  e another..*/.#d
f140: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
f150: 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30  IC_OPEN     0xa0
f160: 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62  29a697  /* Datab
f170: 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23  ase is open */.#
f180: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
f190: 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39  GIC_CLOSED   0x9
f1a0: 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61  f3c2d33  /* Data
f1b0: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a  base is closed *
f1c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f1d0: 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20  _MAGIC_SICK     
f1e0: 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45  0x4b771290  /* E
f1f0: 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e  rror and awaitin
f200: 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69  g close */.#defi
f210: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f220: 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37  BUSY     0xf03b7
f230: 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65  906  /* Database
f240: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
f250: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
f260: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20  ITE_MAGIC_ERROR 
f270: 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f     0xb5357930  /
f280: 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  * An SQLITE_MISU
f290: 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  SE error occurre
f2a0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
f2b0: 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45  ITE_MAGIC_ZOMBIE
f2c0: 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f     0x64cffc7f  /
f2d0: 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73  * Close with las
f2e0: 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73  t statement clos
f2f0: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  e */../*.** Each
f300: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
f310: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
f320: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
f330: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
f340: 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62  cture.  For glob
f350: 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  al built-in func
f360: 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74  tions (ex: subst
f370: 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e  r(), max(), coun
f380: 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  t()).** a pointe
f390: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
f3a0: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
f3b0: 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  he sqlite3Builti
f3c0: 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63  nFunctions objec
f3d0: 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f  t..** For per-co
f3e0: 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61  nnection applica
f3f0: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e  tion-defined fun
f400: 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65  ctions, a pointe
f410: 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72  r to this.** str
f420: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
f430: 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20  n the db->aHash 
f440: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  hash table..**.*
f450: 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20 66 69  * The u.pHash fi
f460: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 74  eld is used by t
f470: 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  he global built-
f480: 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73  ins.  The u.pDes
f490: 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64  tructor.** field
f4a0: 20 69 73 20 75 73 65 64 20 62 79 20 70 65 72 2d   is used by per-
f4b0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64  connection app-d
f4c0: 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f  ef functions..*/
f4d0: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20  .struct FuncDef 
f4e0: 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20  {.  i8 nArg;    
f4f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f500: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  er of arguments.
f510: 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d    -1 means unlim
f520: 69 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 66 75  ited */.  u32 fu
f530: 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  ncFlags;       /
f540: 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69  * Some combinati
f550: 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e  on of SQLITE_FUN
f560: 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  C_* */.  void *p
f570: 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a  UserData;     /*
f580: 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d   User data param
f590: 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65  eter */.  FuncDe
f5a0: 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  f *pNext;      /
f5b0: 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20  * Next function 
f5c0: 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a  with same name *
f5d0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e  /.  void (*xSFun
f5e0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
f5f0: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
f600: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e  value**); /* fun
f610: 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f  c or agg-step */
f620: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
f630: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
f640: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
f650: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20           /* Agg 
f660: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76  finalizer */.  v
f670: 6f 69 64 20 28 2a 78 56 61 6c 75 65 29 28 73 71  oid (*xValue)(sq
f680: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
f690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6a0: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
f6b0: 61 67 67 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76  agg value */.  v
f6c0: 6f 69 64 20 28 2a 78 49 6e 76 65 72 73 65 29 28  oid (*xInverse)(
f6d0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f6e0: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
f6f0: 75 65 2a 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73  ue**); /* invers
f700: 65 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20  e agg-step */.  
f710: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
f720: 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65  e;   /* SQL name
f730: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
f740: 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  . */.  union {. 
f750: 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73     FuncDef *pHas
f760: 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  h;      /* Next 
f770: 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74  with a different
f780: 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61   name but the sa
f790: 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46  me hash */.    F
f7a0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
f7b0: 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a  Destructor;   /*
f7c0: 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   Reference count
f7d0: 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  ed destructor fu
f7e0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b  nction */.  } u;
f7f0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
f800: 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73  structure encaps
f810: 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75  ulates a user-fu
f820: 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f  nction destructo
f830: 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a  r callback (as.*
f840: 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69  * configured usi
f850: 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69  ng create_functi
f860: 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72  on_v2()) and a r
f870: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72  eference counter
f880: 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65  . When.** create
f890: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69  _function_v2() i
f8a0: 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61  s called to crea
f8b0: 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69  te a function wi
f8c0: 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c  th a destructor,
f8d0: 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a  .** a single obj
f8e0: 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
f8f0: 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46   is allocated. F
f900: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52  uncDestructor.nR
f910: 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  ef is set to.** 
f920: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75  the number of Fu
f930: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72  ncDef objects cr
f940: 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20  eated (either 1 
f950: 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20  or 3, depending 
f960: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72  on whether.** or
f970: 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69   not the specifi
f980: 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53  ed encoding is S
f990: 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20  QLITE_ANY). The 
f9a0: 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63  FuncDef.pDestruc
f9b0: 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66  tor.** member of
f9c0: 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77   each of the new
f9d0: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
f9e0: 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74   is set to point
f9f0: 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65   to the allocate
fa00: 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63  d.** FuncDestruc
fa10: 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  tor..**.** There
fa20: 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20  after, when one 
fa30: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f  of the FuncDef o
fa40: 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65  bjects is delete
fa50: 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  d, the reference
fa60: 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69  .** count on thi
fa70: 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72  s object is decr
fa80: 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74  emented. When it
fa90: 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20   reaches 0, the 
faa0: 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73  destructor.** is
fab0: 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65   invoked and the
fac0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
fad0: 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e  structure freed.
fae0: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
faf0: 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e  estructor {.  in
fb00: 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28  t nRef;.  void (
fb10: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
fb20: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  *);.  void *pUse
fb30: 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rData;.};../*.**
fb40: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
fb50: 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61   for FuncDef.fla
fb60: 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74  gs.  Note that t
fb70: 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f  he _LENGTH and _
fb80: 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73  TYPEOF.** values
fb90: 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   must correspond
fba0: 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   to OPFLAG_LENGT
fbb0: 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
fbc0: 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a  TYPEOFARG.  And.
fbd0: 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ** SQLITE_FUNC_C
fbe0: 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20  ONSTANT must be 
fbf0: 74 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49  the same as SQLI
fc00: 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43  TE_DETERMINISTIC
fc10: 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
fc20: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
fc30: 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20  nts in the code 
fc40: 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a  to verify this..
fc50: 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
fc60: 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
fc70: 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
fc80: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fc90: 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d  UNC_MINMAX    ==
fca0: 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20    NC_MinMaxAgg  
fcb0: 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78      == SF_MinMax
fcc0: 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  Agg.**     SQLIT
fcd0: 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20  E_FUNC_LENGTH   
fce0: 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   ==  OPFLAG_LENG
fcf0: 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c  THARG.**     SQL
fd00: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
fd10: 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59     ==  OPFLAG_TY
fd20: 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53  PEOFARG.**     S
fd30: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
fd40: 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f  ANT  ==  SQLITE_
fd50: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72  DETERMINISTIC fr
fd60: 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20  om the API.**   
fd70: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e    SQLITE_FUNC_EN
fd80: 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20  CMASK   depends 
fd90: 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d  on SQLITE_UTF* m
fda0: 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49  acros in the API
fdb0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
fdc0: 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20  TE_FUNC_ENCMASK 
fdd0: 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54   0x0003 /* SQLIT
fde0: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55  E_UTF8, SQLITE_U
fdf0: 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c  TF16BE or UTF16L
fe00: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
fe10: 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20  ITE_FUNC_LIKE   
fe20: 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64    0x0004 /* Cand
fe30: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
fe40: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
fe50: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fe60: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
fe70: 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73  0x0008 /* Case-s
fe80: 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79  ensitive LIKE-ty
fe90: 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  pe function */.#
fea0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
feb0: 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30  NC_EPHEM    0x00
fec0: 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e  10 /* Ephemeral.
fed0: 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44    Delete with VD
fee0: 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BE */.#define SQ
fef0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ff00: 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c  LL 0x0020 /* sql
ff10: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
ff20: 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61  eq() might be ca
ff30: 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lled*/.#define S
ff40: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
ff50: 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75  H   0x0040 /* Bu
ff60: 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20  ilt-in length() 
ff70: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
ff80: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ff90: 54 59 50 45 4f 46 20 20 20 30 78 30 30 38 30 20  TYPEOF   0x0080 
ffa0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65  /* Built-in type
ffb0: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  of() function */
ffc0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ffd0: 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78  FUNC_COUNT    0x
ffe0: 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0100 /* Built-in
fff0: 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67   count(*) aggreg
10000 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ate */.#define S
10010 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45  QLITE_FUNC_COALE
10020 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75  SCE 0x0200 /* Bu
10030 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
10040 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f  ) or ifnull() */
10050 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10060 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78  FUNC_UNLIKELY 0x
10070 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0400 /* Built-in
10080 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63   unlikely() func
10090 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
100a0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
100b0 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43  TANT 0x0800 /* C
100c0 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67  onstant inputs g
100d0 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f  ive a constant o
100e0 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65  utput */.#define
100f0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
10100 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20  MAX   0x1000 /* 
10110 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61  True for min() a
10120 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67 61  nd max() aggrega
10130 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
10140 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10150 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53  NG  0x2000 /* "S
10160 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c  low Change". Val
10170 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69  ue constant duri
10180 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20 20 20  ng a.           
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101a0 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67           ** sing
101b0 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74  le query - might
101c0 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d   change over tim
101d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
101e0 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54  ITE_FUNC_AFFINIT
101f0 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75 69 6c  Y 0x4000 /* Buil
10200 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28 29 20  t-in affinity() 
10210 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
10220 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10230 4f 46 46 53 45 54 20 20 20 30 78 38 30 30 30 20  OFFSET   0x8000 
10240 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69  /* Built-in sqli
10250 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75 6e 63  te_offset() func
10260 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
10270 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44  SQLITE_FUNC_WIND
10280 4f 57 20 20 20 30 78 30 30 30 31 30 30 30 30 20  OW   0x00010000 
10290 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 77 69 6e 64  /* Built-in wind
102a0 6f 77 2d 6f 6e 6c 79 20 66 75 6e 63 74 69 6f 6e  ow-only function
102b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
102c0 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 5f 53  TE_FUNC_WINDOW_S
102d0 49 5a 45 20 30 78 32 30 30 30 30 20 2f 2a 20 52  IZE 0x20000 /* R
102e0 65 71 75 69 72 65 73 20 70 61 72 74 69 74 69 6f  equires partitio
102f0 6e 20 73 69 7a 65 20 61 73 20 61 72 67 2e 20 2a  n size as arg. *
10300 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10310 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 20 30  _FUNC_INTERNAL 0
10320 78 30 30 30 34 30 30 30 30 20 2f 2a 20 46 6f 72  x00040000 /* For
10330 20 75 73 65 20 62 79 20 4e 65 73 74 65 64 50 61   use by NestedPa
10340 72 73 65 28 29 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f  rse() only */../
10350 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
10360 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
10370 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
10380 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
10390 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
103a0 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
103b0 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
103c0 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
103d0 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
103e0 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
103f0 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10400 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
10410 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
10420 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
10430 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
10440 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
10450 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65  e.**     impleme
10460 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
10470 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
10480 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
10490 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
104a0 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
104b0 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
104c0 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
104d0 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
104e0 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
104f0 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
10500 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
10510 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
10520 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74  .**     argument
10530 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68   bNC is true, th
10540 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  en the SQLITE_FU
10550 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67  NC_NEEDCOLL flag
10560 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20   is set..**.**  
10570 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
10580 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10590 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
105a0 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
105b0 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
105c0 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
105d0 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a  ONSTANT flag..**
105e0 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28  .**   DFUNCTION(
105f0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10600 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
10610 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
10620 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
10630 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
10640 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
10650 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64  g and.**     add
10660 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
10670 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20  C_SLOCHNG flag. 
10680 20 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26   Used for date &
10690 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a   time functions.
106a0 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74  **     and funct
106b0 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65  ions like sqlite
106c0 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20  _version() that 
106d0 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20  can change, but 
106e0 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20  not during.**   
106f0 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79    a single query
10700 2e 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69  .  The iArg is i
10710 67 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65  gnored.  The use
10720 72 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73  r-data is always
10730 20 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61   set.**     to a
10740 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20   NULL pointer.  
10750 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65  The bNC paramete
10760 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  r is not used..*
10770 2a 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45  *.**   PURE_DATE
10780 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10790 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
107a0 2a 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20  **     Used for 
107b0 22 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65  "pure" date/time
107c0 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73   functions, this
107d0 20 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44   macro is like D
107e0 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20  FUNCTION.**     
107f0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64  except that it d
10800 6f 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49  oes set the SQLI
10810 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
10820 20 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73   flags.  iArg is
10830 0a 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20  .**     ignored 
10840 61 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74  and the user-dat
10850 61 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63  a for these func
10860 74 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20  tions is set to 
10870 61 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74  an .**     arbit
10880 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f  rary non-NULL po
10890 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20  inter.  The bNC 
108a0 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
108b0 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41   used..**.**   A
108c0 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
108d0 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
108e0 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a   xStep, xFinal).
108f0 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10900 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61  reate an aggrega
10910 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  te function defi
10920 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nition implement
10930 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65  ed by.**     the
10940 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74   C functions xSt
10950 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54  ep and xFinal. T
10960 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61  he first four pa
10970 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20  rameters.**     
10980 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
10990 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
109a0 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70  as the first 4 p
109b0 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20  arameters to.** 
109c0 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a      FUNCTION()..
109d0 2a 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49 4f  **.**   WFUNCTIO
109e0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
109f0 41 72 67 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  Arg, xStep, xFin
10a00 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76  al, xValue, xInv
10a10 65 72 73 65 29 0a 2a 2a 20 20 20 20 20 55 73 65  erse).**     Use
10a20 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61  d to create an a
10a30 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
10a40 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70  n definition imp
10a50 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20  lemented by.**  
10a60 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f     the C functio
10a70 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69  ns xStep and xFi
10a80 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66  nal. The first f
10a90 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a  our parameters.*
10aa0 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70  *     are interp
10ab0 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  reted in the sam
10ac0 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72  e way as the fir
10ad0 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20  st 4 parameters 
10ae0 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49  to.**     FUNCTI
10af0 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49  ON()..**.**   LI
10b00 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
10b10 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29  rg, pArg, flags)
10b20 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
10b30 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
10b40 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
10b50 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
10b60 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74  n zName.**     t
10b70 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
10b80 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69   arguments and i
10b90 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
10ba0 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20   a call to C.** 
10bb0 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b      function lik
10bc0 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20  eFunc. Argument 
10bd0 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  pArg is cast to 
10be0 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d  a (void *) and m
10bf0 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c  ade.**     avail
10c00 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63  able as the func
10c10 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28  tion user-data (
10c20 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
10c30 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20  a()). The.**    
10c40 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76   FuncDef.flags v
10c50 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
10c60 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  o the value pass
10c70 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a  ed as the flags.
10c80 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72  **     parameter
10c90 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e  ..*/.#define FUN
10ca0 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
10cb0 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10cc0 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10cd0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10ce0 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
10cf0 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
10d00 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
10d10 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
10d20 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
10d30 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
10d40 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
10d50 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e  ine VFUNCTION(zN
10d60 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10d70 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10d80 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
10d90 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
10da0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
10db0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
10dc0 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
10dd0 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
10de0 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
10df0 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e  define DFUNCTION
10e00 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10e10 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
10e20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
10e30 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
10e40 51 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20  QLITE_UTF8, \.  
10e50 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c   0, 0, xFunc, 0,
10e60 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b   0, 0, #zName, {
10e70 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52  0} }.#define PUR
10e80 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  E_DATE(zName, nA
10e90 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10ea0 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
10eb0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10ec0 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38  CHNG|SQLITE_UTF8
10ed0 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  |SQLITE_FUNC_CON
10ee0 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69  STANT, \.   (voi
10ef0 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69  d*)&sqlite3Confi
10f00 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
10f10 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10f20 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  } }.#define FUNC
10f30 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
10f40 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10f50 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
10f60 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54   \.  {nArg,SQLIT
10f70 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
10f80 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10f90 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10fa0 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
10fb0 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  s,\.   SQLITE_IN
10fc0 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
10fd0 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
10fe0 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
10ff0 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e  .#define STR_FUN
11000 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
11010 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, pArg, bNC, xF
11020 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
11030 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
11040 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
11050 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
11060 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
11070 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c   pArg, 0, xFunc,
11080 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
11090 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45  , }.#define LIKE
110a0 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
110b0 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a  , arg, flags) \.
110c0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
110d0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
110e0 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c  LITE_UTF8|flags,
110f0 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72   \.   (void *)ar
11100 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20  g, 0, likeFunc, 
11110 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
11120 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41   {0} }.#define A
11130 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
11140 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
11150 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56  Step, xFinal, xV
11160 61 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  alue) \.  {nArg,
11170 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
11180 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
11190 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
111a0 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
111b0 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
111c0 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23 7a  inal,xValue,0,#z
111d0 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69  Name, {0}}.#defi
111e0 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e  ne AGGREGATE2(zN
111f0 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
11200 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
11210 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  l, extraFlags) \
11220 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
11230 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
11240 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c  _FUNC_NEEDCOLL)|
11250 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20  extraFlags, \.  
11260 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
11270 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
11280 70 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c  p,xFinal,xFinal,
11290 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23  0,#zName, {0}}.#
112a0 64 65 66 69 6e 65 20 57 41 47 47 52 45 47 41 54  define WAGGREGAT
112b0 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
112c0 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
112d0 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78  Final, xValue, x
112e0 49 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a 20 20  Inverse, f) \.  
112f0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
11300 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
11310 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c 20  NC_NEEDCOLL)|f, 
11320 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
11330 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
11340 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61  xStep,xFinal,xVa
11350 6c 75 65 2c 78 49 6e 76 65 72 73 65 2c 23 7a 4e  lue,xInverse,#zN
11360 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
11370 65 20 49 4e 54 45 52 4e 41 4c 5f 46 55 4e 43 54  e INTERNAL_FUNCT
11380 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
11390 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
113a0 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49  g, SQLITE_FUNC_I
113b0 4e 54 45 52 4e 41 4c 7c 53 51 4c 49 54 45 5f 55  NTERNAL|SQLITE_U
113c0 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f  TF8|SQLITE_FUNC_
113d0 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 30  CONSTANT, \.   0
113e0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
113f0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
11400 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63   }.../*.** All c
11410 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
11420 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
11430 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
11440 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
11450 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
11460 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
11470 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
11480 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
11490 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
114a0 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
114b0 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
114c0 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
114d0 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
114e0 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
114f0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
11500 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
11510 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11530 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
11540 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
11550 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
11560 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
11570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11580 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
11590 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
115a0 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
115b0 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
115c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
115d0 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
115e0 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
115f0 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11610 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
11620 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
11630 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
11640 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
11650 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
11660 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
11670 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
11680 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
11690 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
116a0 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
116b0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
116c0 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
116d0 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
116e0 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
116f0 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
11700 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
11710 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
11720 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
11730 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
11740 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
11750 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
11760 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
11770 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
11780 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
11790 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
117a0 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
117b0 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
117c0 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
117d0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
117e0 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
117f0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
11800 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
11810 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11830 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
11840 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
11850 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
11860 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11870 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
11880 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
11890 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
118a0 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
118b0 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
118c0 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
118d0 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
118e0 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  tion */.  Table 
118f0 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20  *pEpoTab;       
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11910 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c  * Eponymous tabl
11920 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c  e for this modul
11930 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69  e */.};../*.** i
11940 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
11950 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
11960 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  an SQL table is 
11970 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61  held in an insta
11980 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
11990 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
119a0 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63  uct Column {.  c
119b0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
119c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
119d0 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68  column, \000, th
119e0 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20  en the type */. 
119f0 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
11a00 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
11a10 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
11a20 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  n */.  char *zCo
11a30 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  ll;     /* Colla
11a40 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
11a50 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65  If NULL, use the
11a60 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
11a70 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f   notNull;      /
11a80 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f  * An OE_ code fo
11a90 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54  r handling a NOT
11aa0 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
11ab0 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
11ac0 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66  ity;   /* One of
11ad0 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
11ae0 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  ... values */.  
11af0 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20  u8 szEst;       
11b00 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
11b10 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74  ze of value in t
11b20 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65  his column. size
11b30 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20  of(INT)==1 */.  
11b40 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20  u8 colFlags;    
11b50 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70   /* Boolean prop
11b60 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c  erties.  See COL
11b70 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65  FLAG_ defines be
11b80 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  low */.};../* Al
11b90 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
11ba0 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73   Column.colFlags
11bb0 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  :.*/.#define COL
11bc0 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78  FLAG_PRIMKEY  0x
11bd0 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0001    /* Colum
11be0 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
11bf0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
11c00 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
11c10 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20  HIDDEN   0x0002 
11c20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63     /* A hidden c
11c30 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75  olumn in a virtu
11c40 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
11c50 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54  ine COLFLAG_HAST
11c60 59 50 45 20 20 30 78 30 30 30 34 20 20 20 20 2f  YPE  0x0004    /
11c70 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c  * Type name foll
11c80 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ows column name 
11c90 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11ca0 41 47 5f 55 4e 49 51 55 45 20 20 20 30 78 30 30  AG_UNIQUE   0x00
11cb0 30 38 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  08    /* Column 
11cc0 64 65 66 20 63 6f 6e 74 61 69 6e 73 20 22 55 4e  def contains "UN
11cd0 49 51 55 45 22 20 6f 72 20 22 50 4b 22 20 2a 2f  IQUE" or "PK" */
11ce0 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
11cf0 5f 53 4f 52 54 45 52 52 45 46 20 30 78 30 30 31  _SORTERREF 0x001
11d00 30 20 20 20 2f 2a 20 55 73 65 20 73 6f 72 74 65  0   /* Use sorte
11d10 72 2d 72 65 66 73 20 77 69 74 68 20 74 68 69 73  r-refs with this
11d20 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a   column */../*.*
11d30 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53  * A "Collating S
11d40 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69  equence" is defi
11d50 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
11d60 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
11d70 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
11d80 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20  . Conceptually, 
11d90 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a collating sequ
11da0 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ence consists of
11db0 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61   a name and.** a
11dc0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74   comparison rout
11dd0 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ine that defines
11de0 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   the order of th
11df0 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a  at sequence..**.
11e00 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43  ** If CollSeq.xC
11e10 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d  mp is NULL, it m
11e20 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  eans that the.**
11e30 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
11e40 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  nce is undefined
11e50 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74  .  Indices built
11e60 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   on an undefined
11e70 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
11e80 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62  quence may not b
11e90 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
11ea0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  n..*/.struct Col
11eb0 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lSeq {.  char *z
11ec0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
11ed0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
11ee0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11ef0 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  , UTF-8 encoded 
11f00 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
11f10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
11f20 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64  xt encoding hand
11f30 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f  led by xCmp() */
11f40 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20  .  void *pUser; 
11f50 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
11f60 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
11f70 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  mp() */.  int (*
11f80 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xCmp)(void*,int,
11f90 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
11fa0 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  t, const void*);
11fb0 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
11fc0 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74  void*);  /* Dest
11fd0 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72  ructor for pUser
11fe0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
11ff0 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62  sort order can b
12000 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20  e either ASC or 
12010 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  DESC..*/.#define
12020 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20   SQLITE_SO_ASC  
12030 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20       0  /* Sort 
12040 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
12050 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
12060 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20  LITE_SO_DESC    
12070 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    1  /* Sort in 
12080 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
12090 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
120a0 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d  E_SO_UNDEFINED -
120b0 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64  1 /* No sort ord
120c0 65 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a  er specified */.
120d0 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
120e0 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
120f0 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
12100 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
12110 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
12120 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
12130 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
12140 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
12150 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
12160 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
12170 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
12180 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
12190 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
121a0 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
121b0 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a  onsecutively..**
121c0 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74  .** But rather t
121d0 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30  han start with 0
121e0 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20   or 1, we begin 
121f0 77 69 74 68 20 27 41 27 2e 20 20 54 68 61 74 20  with 'A'.  That 
12200 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c  way,.** when mul
12210 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74  tiple affinity t
12220 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65  ypes are concate
12230 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72  nated into a str
12240 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20  ing and.** used 
12250 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e  as the P4 operan
12260 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20  d, they will be 
12270 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a  more readable..*
12280 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74  *.** Note also t
12290 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20  hat the numeric 
122a0 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65  types are groupe
122b0 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68  d together so th
122c0 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f  at testing.** fo
122d0 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65  r a numeric type
122e0 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d   is a single com
122f0 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68  parison.  And th
12300 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66  e BLOB type is f
12310 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  irst..*/.#define
12320 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42   SQLITE_AFF_BLOB
12330 20 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65       'A'.#define
12340 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
12350 20 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65       'B'.#define
12360 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
12370 52 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65  RIC  'C'.#define
12380 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
12390 47 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65  GER  'D'.#define
123a0 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
123b0 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e       'E'..#defin
123c0 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72  e sqlite3IsNumer
123d0 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28  icAffinity(X)  (
123e0 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  (X)>=SQLITE_AFF_
123f0 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20  NUMERIC)../*.** 
12400 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
12410 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73  ASK values masks
12420 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69   off the signifi
12430 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a  cant bits of an.
12440 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75  ** affinity valu
12450 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
12460 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20  LITE_AFF_MASK   
12470 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64    0x47../*.** Ad
12480 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c  ditional bit val
12490 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ues that can be 
124a0 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66  ORed with an aff
124b0 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a  inity without.**
124c0 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66   changing the af
124d0 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  finity..**.** Th
124e0 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
124f0 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69   flag is a combi
12500 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51  nation of NULLEQ
12510 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e   and JUMPIFNULL.
12520 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e  .** It causes an
12530 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72   assert() to fir
12540 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  e if either oper
12550 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69  and to a compari
12560 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20  son.** operator 
12570 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20  is NULL.  It is 
12580 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e  added to certain
12590 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
125a0 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76  ators to.** prov
125b0 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61  e that the opera
125c0 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e  nds are always N
125d0 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66  OT NULL..*/.#def
125e0 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  ine SQLITE_KEEPN
125f0 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a  ULL     0x08  /*
12600 20 55 73 65 64 20 62 79 20 76 65 63 74 6f 72 20   Used by vector 
12610 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66  == or <> */.#def
12620 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  ine SQLITE_JUMPI
12630 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a  FNULL   0x10  /*
12640 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72   jumps if either
12650 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
12660 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
12670 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20  TE_STOREP2      
12680 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72  0x20  /* Store r
12690 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d  esult in reg[P2]
126a0 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d   rather than jum
126b0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  p */.#define SQL
126c0 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20  ITE_NULLEQ      
126d0 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e   0x80  /* NULL=N
126e0 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
126f0 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20  QLITE_NOTNULL   
12700 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65     0x90  /* Asse
12710 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73  rt that operands
12720 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20   are never NULL 
12730 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  */../*.** An obj
12740 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
12750 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
12760 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62  each virtual tab
12770 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a  le present in.**
12780 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12790 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  hema..**.** If t
127a0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
127b0 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68  ma is shared, th
127c0 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20  en there is one 
127d0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
127e0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f  .** structure fo
127f0 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
12800 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69  connection (sqli
12810 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20  te3*) that uses 
12820 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63  the shared.** sc
12830 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65  hema. This is be
12840 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62  cause each datab
12850 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72  ase connection r
12860 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20  equires its own 
12870 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e  unique.** instan
12880 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ce of the sqlite
12890 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75  3_vtab* handle u
128a0 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
128b0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a  e virtual table.
128c0 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
128d0 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  n. sqlite3_vtab*
128e0 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74   handles can not
128f0 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65   be shared betwe
12900 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  en.** database c
12910 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e  onnections, even
12920 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f   when the rest o
12930 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
12940 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65  database.** sche
12950 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
12960 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
12970 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
12980 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
12990 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
129a0 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
129b0 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
129c0 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
129d0 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
129e0 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
129f0 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
12a00 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12a10 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
12a20 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
12a30 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
12a40 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
12a50 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
12a60 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74  al tables.** wit
12a70 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
12a80 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
12a90 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
12aa0 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20   the callers.** 
12ab0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
12ac0 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64  se accesses need
12ad0 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20   to be made via 
12ae0 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
12af0 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
12b00 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
12b10 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
12b20 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
12b30 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
12b40 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
12b50 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
12b60 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
12b70 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
12b80 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
12b90 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
12ba0 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
12bb0 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
12bc0 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
12bd0 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
12be0 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
12bf0 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
12c00 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
12c10 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
12c20 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
12c30 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
12c40 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
12c50 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
12c60 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
12c70 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
12c80 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
12c90 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
12ca0 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
12cb0 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
12cc0 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
12cd0 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
12ce0 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
12cf0 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
12d00 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
12d10 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
12d20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
12d30 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
12d40 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
12d50 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
12d60 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
12d70 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
12d80 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
12d90 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
12da0 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  not.** deleted a
12db0 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
12dc0 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
12dd0 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
12de0 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  ()ed.** immediat
12df0 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68  ely. Instead, th
12e00 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f  ey are moved fro
12e10 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  m the Table.pVTa
12e20 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61  ble list to.** a
12e30 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69  nother linked li
12e40 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65  st headed by the
12e50 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
12e60 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74  nect member of t
12e70 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
12e80 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75  ing sqlite3 stru
12e90 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20  cture. They are 
12ea0 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69  then deleted/xDi
12eb0 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65  sconnected.** ne
12ec0 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d  xt time a statem
12ed0 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20  ent is prepared 
12ee0 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74  using said sqlit
12ef0 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e  e3*. This is don
12f00 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65  e.** to avoid de
12f10 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e  adlock issues in
12f20 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65  volving multiple
12f30 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
12f40 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72  utexes..** Refer
12f50 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f   to comments abo
12f60 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69  ve function sqli
12f70 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
12f80 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  t() for an.** ex
12f90 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20  planation as to 
12fa0 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74  why it is safe t
12fb0 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74  o add an entry t
12fc0 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69  o an sqlite3.pDi
12fd0 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74  sconnect.** list
12fe0 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67   without holding
12ff0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
13000 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  ng sqlite3.mutex
13010 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   mutex..**.** Th
13020 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a  e memory for obj
13030 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70  ects of this typ
13040 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f  e is always allo
13050 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  cated by.** sqli
13060 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
13070 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
13080 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
13090 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
130a0 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61  s.** the first a
130b0 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  rgument..*/.stru
130c0 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71  ct VTable {.  sq
130d0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
130e0 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
130f0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
13100 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
13110 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d  his table */.  M
13120 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20  odule *pMod;    
13130 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
13140 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d  ter to module im
13150 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
13160 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
13170 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50  pVtab;      /* P
13180 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69  ointer to vtab i
13190 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74  nstance */.  int
131a0 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
131b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
131c0 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
131d0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a  this structure *
131e0 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69  /.  u8 bConstrai
131f0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
13200 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
13210 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74  ints are support
13220 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76  ed */.  int iSav
13230 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
13240 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68    /* Depth of th
13250 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63  e SAVEPOINT stac
13260 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  k */.  VTable *p
13270 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
13280 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b   /* Next in link
13290 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f  ed list (see abo
132a0 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ve) */.};../*.**
132b0 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20   The schema for 
132c0 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61  each SQL table a
132d0 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65  nd view is repre
132e0 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
132f0 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  .** by an instan
13300 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
13310 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
13320 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b  /.struct Table {
13330 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
13340 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
13350 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
13360 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e  view */.  Column
13370 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f   *aCol;        /
13380 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
13390 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
133a0 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  */.  Index *pInd
133b0 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  ex;       /* Lis
133c0 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73  t of SQL indexes
133d0 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   on this table. 
133e0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
133f0 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c  lect;     /* NUL
13400 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50  L for tables.  P
13410 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74  oints to definit
13420 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a  ion if a view. *
13430 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b  /.  FKey *pFKey;
13440 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b           /* Link
13450 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66  ed list of all f
13460 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74  oreign keys in t
13470 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  his table */.  c
13480 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
13490 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
134a0 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
134b0 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
134c0 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  mn */.  ExprList
134d0 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20   *pCheck;    /* 
134e0 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  All CHECK constr
134f0 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20  aints */.       
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13510 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73  /*   ... also us
13520 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ed as column nam
13530 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57  e list in a VIEW
13540 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
13550 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
13560 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f  ot BTree page fo
13570 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  r this table */.
13580 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20    u32 nTabRef;  
13590 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
135a0 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
135b0 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
135c0 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20  u32 tabFlags;   
135d0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
135e0 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
135f0 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20   i16 iPKey;     
13600 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
13610 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43  negative, use aC
13620 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65  ol[iPKey] as the
13630 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20   rowid */.  i16 
13640 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  nCol;           
13650 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
13660 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
13670 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
13680 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a  nRowLogEst;   /*
13690 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
136a0 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
136b0 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
136c0 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  le */.  LogEst s
136d0 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20  zTabRow;     /* 
136e0 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
136f0 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77  f each table row
13700 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66   in bytes */.#if
13710 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
13720 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67  E_COSTMULT.  Log
13730 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20  Est costMult;   
13740 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70    /* Cost multip
13750 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74  lier for using t
13760 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e  his table */.#en
13770 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66  dif.  u8 keyConf
13780 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
13790 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
137a0 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
137b0 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
137c0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
137d0 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
137e0 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f  LE.  int addColO
137f0 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66  ffset;    /* Off
13800 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41  set in CREATE TA
13810 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20  BLE stmt to add 
13820 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
13830 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
13840 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
13850 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d  ALTABLE.  int nM
13860 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f  oduleArg;      /
13870 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
13880 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
13890 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ule */.  char **
138a0 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a  azModuleArg;  /*
138b0 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63   0: module 1: sc
138c0 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d  hema 2: vtab nam
138d0 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a  e 3...: args */.
138e0 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
138f0 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
13900 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
13910 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72  . */.#endif.  Tr
13920 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
13930 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72     /* List of tr
13940 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e  iggers stored in
13950 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63   pSchema */.  Sc
13960 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
13970 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61     /* Schema tha
13980 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20  t contains this 
13990 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65  table */.  Table
139a0 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20   *pNextZombie;  
139b0 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50  /* Next on the P
139c0 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20  arse.pZombieTab 
139d0 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
139e0 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
139f0 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c   for Table.tabFl
13a00 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f  ags..**.** TF_OO
13a10 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20  OHidden applies 
13a20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65  to tables or vie
13a30 77 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64  w that have hidd
13a40 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  en columns that 
13a50 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20  are.** followed 
13a60 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f  by non-hidden co
13a70 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a  lumns.  Example:
13a80 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41    "CREATE VIRTUA
13a90 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a  L TABLE x USING.
13aa0 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45  ** vtab1(a HIDDE
13ab0 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20  N, b);".  Since 
13ac0 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64  "b" is a non-hid
13ad0 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22  den column but "
13ae0 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a  a" is hidden,.**
13af0 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65   the TF_OOOHidde
13b00 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c  n attribute woul
13b10 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20  d apply in this 
13b20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c  case.  Such tabl
13b30 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70  es require.** sp
13b40 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64  ecial handling d
13b50 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f  uring INSERT pro
13b60 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66  cessing..*/.#def
13b70 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20  ine TF_Readonly 
13b80 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 20         0x0001   
13b90 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79   /* Read-only sy
13ba0 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64  stem table */.#d
13bb0 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72  efine TF_Ephemer
13bc0 61 6c 20 20 20 20 20 20 20 30 78 30 30 30 32 20  al       0x0002 
13bd0 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72     /* An ephemer
13be0 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
13bf0 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72  ine TF_HasPrimar
13c00 79 4b 65 79 20 20 20 30 78 30 30 30 34 20 20 20  yKey   0x0004   
13c10 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20   /* Table has a 
13c20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
13c30 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e  define TF_Autoin
13c40 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38  crement   0x0008
13c50 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
13c60 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
13c70 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
13c80 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61  define TF_HasSta
13c90 74 31 20 20 20 20 20 20 20 20 30 78 30 30 31 30  t1        0x0010
13ca0 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73      /* nRowLogEs
13cb0 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74  t set from sqlit
13cc0 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69  e_stat1 */.#defi
13cd0 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
13ce0 69 64 20 20 20 20 30 78 30 30 32 30 20 20 20 20  id    0x0020    
13cf0 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52  /* No rowid.  PR
13d00 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65  IMARY KEY is the
13d10 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
13d20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
13d30 64 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20  d  0x0040    /* 
13d40 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20  No user-visible 
13d50 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a  "rowid" column *
13d60 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f  /.#define TF_OOO
13d70 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 30  Hidden       0x0
13d80 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66  080    /* Out-of
13d90 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f  -Order hidden co
13da0 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lumns */.#define
13db0 20 54 46 5f 53 74 61 74 73 55 73 65 64 20 20 20   TF_StatsUsed   
13dc0 20 20 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a      0x0100    /*
13dd0 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64   Query planner d
13de0 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65  ecisions affecte
13df0 64 20 62 79 0a 20 20 20 20 20 20 20 20 20 20 20  d by.           
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64            ** Ind
13e20 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d  ex.aiRowLogEst[]
13e30 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69   values */.#defi
13e40 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c  ne TF_HasNotNull
13e50 20 20 20 20 20 20 30 78 30 32 30 30 20 20 20 20        0x0200    
13e60 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20  /* Contains NOT 
13e70 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73  NULL constraints
13e80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53   */.#define TF_S
13e90 68 61 64 6f 77 20 20 20 20 20 20 20 20 20 20 30  hadow          0
13ea0 78 30 34 30 30 20 20 20 20 2f 2a 20 54 72 75 65  x0400    /* True
13eb0 20 66 6f 72 20 61 20 73 68 61 64 6f 77 20 74 61   for a shadow ta
13ec0 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65  ble */../*.** Te
13ed0 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
13ee0 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
13ef0 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
13f00 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
13f10 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
13f20 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
13f30 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
13f40 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
13f50 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
13f60 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
13f70 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
13f80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13f90 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
13fa0 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
13fb0 61 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  al(X)      ((X)-
13fc0 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c  >nModuleArg).#el
13fd0 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
13fe0 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
13ff0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
14000 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
14010 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ne if a column i
14020 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64  s hidden.  IsOrd
14030 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
14040 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b  n().** only work
14050 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61  s for non-virtua
14060 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61  l tables (ordina
14070 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69  ry tables and vi
14080 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61  ews) and is.** a
14090 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65  lways false unle
140a0 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ss SQLITE_ENABLE
140b0 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20  _HIDDEN_COLUMNS 
140c0 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65  is defined.  The
140d0 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  .** IsHiddenColu
140e0 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65  mn() macro is ge
140f0 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a  neral purpose..*
14100 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
14110 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
14120 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64  EN_COLUMNS).#  d
14130 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
14140 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
14150 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
14160 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
14170 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
14180 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
14190 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
141a0 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
141b0 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
141c0 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53  #elif !defined(S
141d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
141e0 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69  ALTABLE).#  defi
141f0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
14200 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
14210 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
14220 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
14230 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
14240 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
14250 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23  umn(X) 0.#else.#
14260 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
14270 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
14280 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
14290 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
142a0 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
142b0 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20  f.../* Does the 
142c0 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77  table have a row
142d0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61  id */.#define Ha
142e0 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28  sRowid(X)     ((
142f0 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
14300 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29  TF_WithoutRowid)
14310 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73  ==0).#define Vis
14320 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28  ibleRowid(X) (((
14330 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
14340 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
14350 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  )==0)../*.** Eac
14360 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  h foreign key co
14370 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69  nstraint is an i
14380 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
14390 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
143a0 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65  re..**.** A fore
143b0 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63  ign key is assoc
143c0 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74  iated with two t
143d0 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f  ables.  The "fro
143e0 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74  m" table is.** t
143f0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
14400 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52  ntains the REFER
14410 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61  ENCES clause tha
14420 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f  t creates the fo
14430 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54  reign.** key.  T
14440 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73  he "to" table is
14450 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
14460 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20  is named in the 
14470 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
14480 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74  e..** Consider t
14490 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a  his example:.**.
144a0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
144b0 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20  BLE ex1(.**     
144c0 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d    a INTEGER PRIM
144d0 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20  ARY KEY,.**     
144e0 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53    b INTEGER CONS
144f0 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52  TRAINT fk1 REFER
14500 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20  ENCES ex2(x).** 
14510 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72      );.**.** For
14520 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b   foreign key "fk
14530 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  1", the from-tab
14540 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20  le is "ex1" and 
14550 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
14560 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61  "ex2"..** Equiva
14570 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a  lent names:.**.*
14580 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65  *     from-table
14590 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a   == child-table.
145a0 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c  **       to-tabl
145b0 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c  e == parent-tabl
145c0 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46  e.**.** Each REF
145d0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67  ERENCES clause g
145e0 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74  enerates an inst
145f0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
14600 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
14610 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61  ** which is atta
14620 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d  ched to the from
14630 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d  -table.  The to-
14640 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65  table need not e
14650 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65  xist when.** the
14660 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63   from-table is c
14670 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69  reated.  The exi
14680 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f  stence of the to
14690 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68  -table is not ch
146a0 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ecked..**.** The
146b0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72   list of all par
146c0 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54  ents for child T
146d0 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61  able X is held a
146e0 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a  t X.pFKey..**.**
146f0 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63   A list of all c
14700 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61  hildren for a ta
14710 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69  ble named Z (whi
14720 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65  ch might not eve
14730 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68  n exist).** is h
14740 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b  eld in Schema.fk
14750 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61  eyHash with a ha
14760 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a  sh key of Z..*/.
14770 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
14780 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
14790 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61    /* Table conta
147a0 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45  ining the REFERE
147b0 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61  NCES clause (aka
147c0 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b  : Child) */.  FK
147d0 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
147e0 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74  /* Next FKey wit
147f0 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46  h the same in pF
14800 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74  rom. Next parent
14810 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63   of pFrom */.  c
14820 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20  har *zTo;       
14830 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c   /* Name of tabl
14840 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70  e that the key p
14850 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50  oints to (aka: P
14860 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79  arent) */.  FKey
14870 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a   *pNextTo;    /*
14880 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73   Next with the s
14890 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68  ame zTo. Next ch
148a0 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20  ild of zTo. */. 
148b0 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20   FKey *pPrevTo; 
148c0 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77     /* Previous w
148d0 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
148e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
148f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14900 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
14910 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a  this key */.  /*
14920 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39   EV: R-30323-219
14930 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66  17 */.  u8 isDef
14940 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20  erred;       /* 
14950 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
14960 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64  nt checking is d
14970 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d  eferred till COM
14980 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74  MIT */.  u8 aAct
14990 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ion[2];        /
149a0 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20  * ON DELETE and 
149b0 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e  ON UPDATE action
149c0 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  s, respectively 
149d0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70  */.  Trigger *ap
149e0 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72  Trigger[2];/* Tr
149f0 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
14a00 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
14a10 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
14a20 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69   {      /* Mappi
14a30 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng of columns in
14a40 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e   pFrom to column
14a50 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20  s in zTo */.    
14a60 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20  int iFrom;      
14a70 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
14a80 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f  f column in pFro
14a90 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  m */.    char *z
14aa0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Col;           /
14ab0 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e  * Name of column
14ac0 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c   in zTo.  If NUL
14ad0 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  L use PRIMARY KE
14ae0 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d  Y */.  } aCol[1]
14af0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14b00 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
14b10 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d  ch of nCol colum
14b20 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ns */.};../*.** 
14b30 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
14b40 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
14b50 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
14b60 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
14b70 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
14b80 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
14b90 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
14ba0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
14bb0 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
14bc0 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
14bd0 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
14be0 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
14bf0 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
14c00 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
14c10 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
14c20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
14c30 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
14c40 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
14c50 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
14c60 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
14c70 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
14c80 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
14c90 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
14ca0 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
14cb0 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
14cc0 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
14cd0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
14ce0 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
14cf0 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
14d00 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
14d10 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
14d20 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
14d30 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
14d40 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
14d50 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
14d60 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
14d70 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
14d80 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
14d90 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
14da0 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
14db0 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
14dc0 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
14dd0 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
14de0 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
14df0 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
14e00 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
14e10 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
14e20 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
14e30 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
14e40 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
14e50 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
14e60 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
14e70 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
14e80 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
14e90 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
14ea0 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
14eb0 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
14ec0 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
14ed0 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
14ee0 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
14ef0 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
14f00 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
14f10 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
14f20 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
14f30 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
14f40 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
14f50 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
14f60 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
14f70 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
14f80 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
14f90 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
14fa0 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
14fb0 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
14fc0 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
14fd0 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
14fe0 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
14ff0 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
15000 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
15010 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
15020 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
15030 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  key..**.** The f
15040 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
15050 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
15060 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
15070 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
15080 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
15090 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
150a0 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
150b0 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
150c0 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
150d0 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
150e0 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
150f0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
15100 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
15110 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
15120 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
15130 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
15140 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
15150 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
15160 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
15170 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
15180 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
15190 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
151a0 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
151b0 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
151c0 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
151d0 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
151e0 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
151f0 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
15200 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
15210 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
15220 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
15230 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
15240 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
15250 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
15260 55 70 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20  Update   6   /* 
15270 50 72 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20  Process as a DO 
15280 55 50 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73  UPDATE in an ups
15290 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ert */.#define O
152a0 45 5f 52 65 73 74 72 69 63 74 20 37 20 20 20 2f  E_Restrict 7   /
152b0 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
152c0 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
152d0 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
152e0 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
152f0 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a  _SetNull  8   /*
15300 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
15310 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
15320 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
15330 5f 53 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a  _SetDflt  9   /*
15340 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
15350 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
15360 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
15370 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
15380 20 31 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20   10  /* Cascade 
15390 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  the changes */.#
153a0 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
153b0 74 20 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61  t  11  /* Do wha
153c0 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
153d0 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
153e0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
153f0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
15400 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
15410 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
15420 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
15430 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
15440 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
15450 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
15460 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
15470 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e  on of the two in
15480 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20  dex keys..**.** 
15490 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f  Note that aSortO
154a0 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c  rder[] and aColl
154b0 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31  [] have nField+1
154c0 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a   slots.  There.*
154d0 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f  * are nField slo
154e0 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ts for the colum
154f0 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74  ns of an index t
15500 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c  hen one extra sl
15510 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f  ot.** for the ro
15520 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  wid at the end..
15530 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
15540 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20  o {.  u32 nRef; 
15550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15560 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ber of reference
15570 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66  s to this KeyInf
15580 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38  o object */.  u8
15590 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
155a0 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
155b0 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
155c0 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
155d0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
155e0 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e  Field;      /* N
155f0 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c  umber of key col
15600 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65  umns in the inde
15610 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46  x */.  u16 nAllF
15620 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f  ield;      /* To
15630 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63  tal columns, inc
15640 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20  luding key plus 
15650 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69  others */.  sqli
15660 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
15670 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
15680 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
15690 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
156a0 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
156b0 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
156c0 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
156d0 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
156e0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
156f0 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
15700 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
15710 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ../*.** This obj
15720 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ect holds a reco
15730 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65  rd which has bee
15740 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
15750 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
15760 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20  fields, for the 
15770 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e  purposes of doin
15780 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  g a comparison..
15790 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
157a0 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
157b0 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
157c0 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
157d0 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
157e0 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
157f0 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
15800 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
15810 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
15820 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
15830 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
15840 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
15850 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
15860 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
15870 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
15880 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
15890 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
158a0 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
158b0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69  code..**.** An i
158c0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
158d0 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73  object serves as
158e0 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69   a "key" for doi
158f0 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a  ng a search on.*
15900 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65  * an index b+tre
15910 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74  e. The goal of t
15920 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20  he search is to 
15930 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74  find the entry t
15940 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64  hat.** is closed
15950 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63   to the key desc
15960 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62  ribed by this ob
15970 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65  ject.  This obje
15980 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a  ct might hold.**
15990 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f   just a prefix o
159a0 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20  f the key.  The 
159b0 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
159c0 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20   is given by.** 
159d0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
159e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
159f0 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65  nd r2 fields are
15a00 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72   the values to r
15a10 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65  eturn if this ke
15a20 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a  y is less than.*
15a30 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  * or greater tha
15a40 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62  n a key in the b
15a50 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65  tree, respective
15a60 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e  ly.  These are n
15a70 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e  ormally.** -1 an
15a80 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c  d +1 respectivel
15a90 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20  y, but might be 
15aa0 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61  inverted to +1 a
15ab0 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74  nd -1 if the b-t
15ac0 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53  ree.** is in DES
15ad0 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  C order..**.** T
15ae0 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f  he key compariso
15af0 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75  n functions actu
15b00 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61  ally return defa
15b10 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79  ult_rc when they
15b20 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61   find.** an equa
15b30 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  ls comparison.  
15b40 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
15b50 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20  e -1, 0, or +1. 
15b60 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a   If there are.**
15b70 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
15b80 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s in the b-tree 
15b90 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
15ba0 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f  y (when only loo
15bb0 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66  king.** at the f
15bc0 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  irst pKeyInfo->n
15bd0 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65  Fields,) then de
15be0 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
15bf0 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20  set to -1 to.** 
15c00 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
15c10 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73   to find the las
15c20 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74  t match, or +1 t
15c30 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  o cause the sear
15c40 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68  ch to.** find th
15c50 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a  e first match..*
15c60 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
15c70 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
15c80 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65  s will set eqSee
15c90 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65  n to true if the
15ca0 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e  y ever.** get an
15cb0 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20  d equal results 
15cc0 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74  when comparing t
15cd0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f  his structure to
15ce0 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64   a b-tree record
15cf0 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c  ..** When defaul
15d00 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61  t_rc!=0, the sea
15d10 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70  rch might end up
15d20 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   on the record i
15d30 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65  mmediately.** be
15d40 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d  fore the first m
15d50 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74  atch or immediat
15d60 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61  ely after the la
15d70 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a  st match.  The.*
15d80 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77  * eqSeen field w
15d90 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65  ill indicate whe
15da0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
15db0 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74  xact match exist
15dc0 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72  s in the.** b-tr
15dd0 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ee..*/.struct Un
15de0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
15df0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
15e00 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
15e10 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
15e20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
15e30 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
15e40 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
15e50 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
15e60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15e70 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
15e80 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
15e90 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
15ea0 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
15eb0 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
15ec0 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
15ed0 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
15ee0 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
15ef0 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
15f00 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
15f10 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38  r NOMEM) */.  i8
15f20 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   r1;            
15f30 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
15f40 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72  turn if (lhs < r
15f50 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20  hs) */.  i8 r2; 
15f60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15f70 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
15f80 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a  if (lhs > rhs) *
15f90 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20  /.  u8 eqSeen;  
15fa0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
15fb0 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63  if an equality c
15fc0 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65  omparison has be
15fd0 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a  en seen */.};...
15fe0 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69  /*.** Each SQL i
15ff0 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e  ndex is represen
16000 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
16010 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
16020 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
16030 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
16040 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  * The columns of
16050 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
16060 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65  are to be indexe
16070 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a  d are described.
16080 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75  ** by the aiColu
16090 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68  mn[] field of th
160a0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  is structure.  F
160b0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70  or example, supp
160c0 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74  ose.** we have t
160d0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
160e0 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a  le and index:.**
160f0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
16100 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c  ABLE Ex1(c1 int,
16110 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74   c2 int, c3 text
16120 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  );.**     CREATE
16130 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78   INDEX Ex2 ON Ex
16140 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20  1(c3,c1);.**.** 
16150 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72  In the Table str
16160 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
16170 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62  g Ex1, nCol==3 b
16180 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
16190 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e  .** three column
161a0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
161b0 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74   In the Index st
161c0 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
161d0 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75  ng.** Ex2, nColu
161e0 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66  mn==2 since 2 of
161f0 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f   the 3 columns o
16200 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65  f Ex1 are indexe
16210 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  d..** The value 
16220 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b  of aiColumn is {
16230 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e  2, 0}.  aiColumn
16240 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74  [0]==2 because t
16250 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  he.** first colu
16260 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
16270 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
16280 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
16290 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
162a0 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
162b0 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
162c0 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
162d0 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
162e0 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
162f0 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
16300 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
16310 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
16320 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
16330 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
16340 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
16350 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
16360 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
16370 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
16380 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
16390 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
163a0 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
163b0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
163c0 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
163d0 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
163e0 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
163f0 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
16400 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
16410 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
16420 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f  solution.** algo
16430 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20  rithm to employ 
16440 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65  whenever an atte
16450 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
16460 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71  nsert a non-uniq
16470 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a  ue.** element..*
16480 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69  *.** While parsi
16490 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  ng a CREATE TABL
164a0 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45  E or CREATE INDE
164b0 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f  X statement in o
164c0 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72  rder to.** gener
164d0 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61  ate VDBE code (a
164e0 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72  s opposed to par
164f0 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72  sing one read fr
16500 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73  om an sqlite_mas
16510 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20  ter.** table as 
16520 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20  part of parsing 
16530 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
16540 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72  base schema), tr
16550 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65  ansient instance
16560 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  s.** of this str
16570 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72  ucture may be cr
16580 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63  eated. In this c
16590 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e  ase the Index.tn
165a0 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a  um variable is.*
165b0 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
165c0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
165d0 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f   VDBE instructio
165e0 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  n, not a databas
165f0 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72  e page.** number
16600 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68   (it cannot - th
16610 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
16620 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64  is not allocated
16630 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a   until the VDBE.
16640 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78  ** program is ex
16650 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e  ecuted). See con
16660 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77  vertToWithoutRow
16670 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65  idTable() for de
16680 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tails..*/.struct
16690 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20   Index {.  char 
166a0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
166b0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
166c0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
166d0 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  16 *aiColumn;   
166e0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
166f0 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
16700 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e  d by this index.
16710 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20    1st is 0 */.  
16720 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67  LogEst *aiRowLog
16730 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d  Est;     /* From
16740 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72   ANALYZE: Est. r
16750 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20  ows selected by 
16760 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
16770 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20   Table *pTable; 
16780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
16790 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67   SQL table being
167a0 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68   indexed */.  ch
167b0 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
167c0 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
167d0 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
167e0 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
167f0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
16800 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
16810 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
16820 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
16830 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74   with the same t
16840 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  able */.  Schema
16850 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
16860 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
16870 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64  taining this ind
16880 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  ex */.  u8 *aSor
16890 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
168a0 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c   /* for each col
168b0 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn: True==DESC,
168c0 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
168d0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a   const char **az
168e0 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72  Coll;     /* Arr
168f0 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20  ay of collation 
16900 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66  sequence names f
16910 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  or index */.  Ex
16920 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72  pr *pPartIdxWher
16930 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20  e;     /* WHERE 
16940 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69  clause for parti
16950 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20  al indices */.  
16960 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78  ExprList *aColEx
16970 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  pr;      /* Colu
16980 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  mn expressions *
16990 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
169b0 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69  DB Page containi
169c0 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20  ng root of this 
169d0 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73  index */.  LogEs
169e0 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20  t szIdxRow;     
169f0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
16a00 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a   average row siz
16a10 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  e in bytes */.  
16a20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20  u16 nKeyCol;    
16a30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16a40 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
16a50 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f  rming the key */
16a60 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
16a70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16a80 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16a90 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69   stored in the i
16aa0 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  ndex */.  u8 onE
16ab0 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rror;           
16ac0 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20     /* OE_Abort, 
16ad0 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65  OE_Ignore, OE_Re
16ae0 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e  place, or OE_Non
16af0 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
16b00 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20  idxType:2;      
16b10 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d  /* 1==UNIQUE, 2=
16b20 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d  =PRIMARY KEY, 0=
16b30 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f  =CREATE INDEX */
16b40 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f  .  unsigned bUno
16b50 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55  rdered:1;   /* U
16b60 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f  se this index fo
16b70 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69  r == or IN queri
16b80 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73  es only */.  uns
16b90 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c  igned uniqNotNul
16ba0 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66  l:1;  /* True if
16bb0 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
16bc0 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c  NULL for all col
16bd0 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  umns */.  unsign
16be0 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20  ed isResized:1; 
16bf0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
16c00 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  sizeIndexObject(
16c10 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
16c20 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  d */.  unsigned 
16c30 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20  isCovering:1;   
16c40 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
16c50 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e  is a covering in
16c60 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  dex */.  unsigne
16c70 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20  d noSkipScan:1; 
16c80 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20    /* Do not try 
16c90 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e  to use skip-scan
16ca0 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e   if true */.  un
16cb0 73 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a  signed hasStat1:
16cc0 31 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c  1;     /* aiRowL
16cd0 6f 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d  ogEst values com
16ce0 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  e from sqlite_st
16cf0 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  at1 */.  unsigne
16d00 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20  d bNoQuery:1;   
16d10 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20    /* Do not use 
16d20 74 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70  this index to op
16d30 74 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a  timize queries *
16d40 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
16d50 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
16d60 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
16d70 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
16d80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
16d90 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
16da0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
16db0 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
16dc0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
16dd0 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
16de0 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
16df0 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
16e00 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
16e10 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
16e20 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
16e30 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
16e40 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
16e50 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
16e60 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
16e70 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  key */.  tRowcnt
16e80 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
16e90 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
16ea0 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20  hmic stat1 data 
16eb0 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a  for this index *
16ec0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77  /.  tRowcnt nRow
16ed0 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20  Est0;        /* 
16ee0 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
16ef0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
16f00 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23  n the index */.#
16f10 65 6e 64 69 66 0a 20 20 42 69 74 6d 61 73 6b 20  endif.  Bitmask 
16f20 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20 20  colNotIdxed;    
16f30 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64 65   /* 0 for uninde
16f40 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70  xed columns in p
16f50 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  Tab */.};../*.**
16f60 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
16f70 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70  for Index.idxTyp
16f80 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e.*/.#define SQL
16f90 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44  ITE_IDXTYPE_APPD
16fa0 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43  EF      0   /* C
16fb0 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
16fc0 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
16fd0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
16fe0 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20  YPE_UNIQUE      
16ff0 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1   /* Implement
17000 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  s a UNIQUE const
17010 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
17020 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
17030 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20  PRIMARYKEY  2   
17040 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52  /* Is the PRIMAR
17050 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61  Y KEY for the ta
17060 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72  ble */../* Retur
17070 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
17080 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b  X is a PRIMARY K
17090 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  EY index */.#def
170a0 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79  ine IsPrimaryKey
170b0 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e  Index(X)  ((X)->
170c0 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  idxType==SQLITE_
170d0 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
170e0 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74  EY)../* Return t
170f0 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
17100 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
17110 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e   */.#define IsUn
17120 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20  iqueIndex(X)    
17130 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21    ((X)->onError!
17140 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68  =OE_None)../* Th
17150 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e  e Index.aiColumn
17160 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f  [] values are no
17170 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20  rmally positive 
17180 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a  integer.  But.**
17190 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20   there are some 
171a0 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
171b0 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61  that have specia
171c0 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64  l meaning:.*/.#d
171d0 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20  efine XN_ROWID  
171e0 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49     (-1)     /* I
171f0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
17200 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64   the rowid */.#d
17210 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20  efine XN_EXPR   
17220 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49     (-2)     /* I
17230 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
17240 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
17250 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  /../*.** Each sa
17260 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
17270 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
17280 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
17290 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
172a0 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
172b0 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
172c0 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
172d0 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
172e0 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
172f0 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
17300 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
17310 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
17320 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
17330 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
17340 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
17350 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
17360 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
17370 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
17380 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
17390 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
173a0 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
173b0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
173c0 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
173d0 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
173e0 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
173f0 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
17400 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
17410 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
17420 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
17430 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
17440 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
17450 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
17460 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
17470 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
17480 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
17490 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
174a0 20 74 6f 20 75 73 65 20 77 69 74 68 69 6e 20 74   to use within t
174b0 68 65 20 66 6c 61 67 73 20 61 72 67 75 6d 65 6e  he flags argumen
174c0 74 20 74 6f 20 73 71 6c 69 74 65 33 47 65 74 54  t to sqlite3GetT
174d0 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  oken()..*/.#defi
174e0 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f  ne SQLITE_TOKEN_
174f0 51 55 4f 54 45 44 20 20 20 20 30 78 31 20 2f 2a  QUOTED    0x1 /*
17500 20 54 6f 6b 65 6e 20 69 73 20 61 20 71 75 6f 74   Token is a quot
17510 65 64 20 69 64 65 6e 74 69 66 69 65 72 2e 20 2a  ed identifier. *
17520 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
17530 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52 44 20 20  _TOKEN_KEYWORD  
17540 20 30 78 32 20 2f 2a 20 54 6f 6b 65 6e 20 69 73   0x2 /* Token is
17550 20 61 20 6b 65 79 77 6f 72 64 2e 20 2a 2f 0a 0a   a keyword. */..
17560 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
17570 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
17580 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
17590 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
175a0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
175b0 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
175c0 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
175d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
175e0 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 74  .** The memory t
175f0 68 61 74 20 22 7a 22 20 70 6f 69 6e 74 73 20 74  hat "z" points t
17600 6f 20 69 73 20 6f 77 6e 65 64 20 62 79 20 6f 74  o is owned by ot
17610 68 65 72 20 6f 62 6a 65 63 74 73 2e 20 20 54 61  her objects.  Ta
17620 6b 65 20 63 61 72 65 0a 2a 2a 20 74 68 61 74 20  ke care.** that 
17630 74 68 65 20 6f 77 6e 65 72 20 6f 66 20 74 68 65  the owner of the
17640 20 22 7a 22 20 73 74 72 69 6e 67 20 64 6f 65 73   "z" string does
17650 20 6e 6f 74 20 64 65 61 6c 6c 6f 63 61 74 65 20   not deallocate 
17660 74 68 65 20 73 74 72 69 6e 67 20 62 65 66 6f 72  the string befor
17670 65 0a 2a 2a 20 74 68 65 20 54 6f 6b 65 6e 20 67  e.** the Token g
17680 6f 65 73 20 6f 75 74 20 6f 66 20 73 63 6f 70 65  oes out of scope
17690 21 20 20 56 65 72 79 20 6f 66 74 65 6e 2c 20 74  !  Very often, t
176a0 68 65 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f  he "z" points to
176b0 20 73 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a 20 69   some place.** i
176c0 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
176d0 74 68 65 20 50 61 72 73 65 2e 7a 53 71 6c 20 74  the Parse.zSql t
176e0 65 78 74 2e 20 20 42 75 74 20 69 74 20 6d 69 67  ext.  But it mig
176f0 68 74 20 61 6c 73 6f 20 70 6f 69 6e 74 20 74 6f  ht also point to
17700 20 61 0a 2a 2a 20 73 74 61 74 69 63 20 73 74 72   a.** static str
17710 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ing..*/.struct T
17720 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
17730 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
17740 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
17750 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
17760 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
17770 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
17780 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
17790 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
177a0 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
177b0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
177c0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
177d0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
177e0 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
177f0 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
17800 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
17810 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
17820 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
17830 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
17840 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
17850 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
17860 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
17870 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
17880 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
17890 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
178a0 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
178b0 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
178c0 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
178d0 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
178e0 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
178f0 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
17900 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
17910 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
17920 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
17930 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
17940 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
17950 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
17960 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
17970 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
17980 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
17990 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
179a0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
179b0 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
179c0 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
179d0 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
179e0 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
179f0 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
17a00 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
17a10 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
17a20 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
17a30 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
17a40 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
17a50 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a70 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
17a80 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
17a90 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
17aa0 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
17ab0 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
17ac0 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
17ad0 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
17ae0 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
17af0 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
17b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b10 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
17b20 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
17b30 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
17b40 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
17b50 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
17b60 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
17b70 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
17b80 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
17b90 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
17ba0 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
17bb0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
17bc0 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
17bd0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
17be0 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
17bf0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
17c00 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
17c10 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
17c20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
17c30 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
17c40 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
17c50 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
17c60 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
17c70 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
17c80 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
17c90 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
17ca0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
17cb0 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
17cc0 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
17cd0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
17ce0 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
17cf0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
17d00 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
17d10 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
17d20 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
17d30 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
17d40 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
17d50 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
17d60 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
17d70 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
17d80 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
17d90 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
17da0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
17db0 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
17dc0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
17dd0 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
17de0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
17df0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
17e00 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
17e10 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
17e20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
17e30 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
17e40 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
17e50 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
17e60 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
17e70 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17e80 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
17e90 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
17ea0 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
17eb0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
17ec0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
17ed0 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
17ee0 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
17f10 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
17f20 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
17f30 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f50 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
17f60 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
17f70 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
17f80 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
17f90 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
17fa0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
17fb0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
17fc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
17fd0 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
17fe0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
17ff0 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
18000 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
18010 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
18020 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
18030 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
18040 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
18050 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
18060 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
18070 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
18080 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
18090 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
180a0 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
180b0 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
180c0 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
180d0 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
180e0 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
180f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18100 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
18110 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
18120 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
18130 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
18140 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
18150 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
18160 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
18170 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
18180 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
18190 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
181a0 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
181b0 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
181c0 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
181d0 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
181e0 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
181f0 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
18200 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
18210 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
18220 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
18230 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
18240 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
18250 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
18260 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
18270 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
18280 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
18290 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
182a0 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
182b0 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
182c0 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
182d0 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
182e0 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
182f0 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
18300 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
18310 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
18320 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
18330 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
18340 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
18350 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
18360 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
18370 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
18380 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
18390 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
183a0 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
183b0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
183c0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
183d0 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
183e0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
183f0 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
18400 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
18410 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
18420 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
18430 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
18440 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
18450 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
18460 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
18470 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
18480 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
18490 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
184a0 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
184b0 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
184c0 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
184d0 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
184e0 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
184f0 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
18500 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
18510 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
18520 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
18530 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
18540 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
18550 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
18560 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54  TK_BLOB,.** or T
18570 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
18580 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
18590 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
185a0 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
185b0 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
185c0 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
185d0 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
185e0 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
185f0 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a  en contains the.
18600 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
18610 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
18620 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
18630 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
18640 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
18650 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
18660 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
18670 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
18680 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
18690 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
186a0 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
186b0 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
186c0 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
186d0 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
186e0 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
186f0 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
18700 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
18710 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
18720 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
18730 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
18740 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
18750 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
18760 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
18770 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
18780 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
18790 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
187a0 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
187b0 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
187c0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
187d0 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
187e0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
187f0 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
18800 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
18810 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
18820 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
18830 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
18840 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
18850 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
18860 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
18870 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
18880 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64  List is.** valid
18890 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
188a0 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
188b0 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
188c0 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
188d0 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
188e0 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
188f0 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
18900 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
18910 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
18920 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
18930 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
18940 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
18950 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
18960 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
18970 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
18980 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
18990 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
189a0 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
189b0 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
189c0 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
189d0 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
189e0 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
189f0 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
18a00 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
18a10 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
18a20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
18a30 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
18a40 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
18a50 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
18a60 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
18a70 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
18a80 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18a90 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
18aa0 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
18ab0 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a  a question mark.
18ac0 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
18ad0 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
18ae0 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
18af0 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
18b00 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75   the index.** nu
18b10 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
18b20 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
18b30 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18b40 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
18b50 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
18b60 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
18b70 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
18b80 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
18b90 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
18ba0 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
18bb0 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
18bc0 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
18bd0 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
18be0 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
18bf0 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
18c00 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
18c10 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
18c20 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
18c30 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
18c40 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
18c50 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
18c60 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
18c70 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
18c80 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
18c90 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
18ca0 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
18cb0 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
18cc0 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
18cd0 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
18ce0 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
18cf0 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
18d00 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
18d10 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
18d20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
18d30 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
18d40 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
18d50 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
18d60 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
18d70 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
18d80 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
18d90 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
18da0 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
18db0 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
18dc0 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
18dd0 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
18de0 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
18df0 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
18e00 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
18e10 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
18e20 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
18e30 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
18e40 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
18e50 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
18e60 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
18e70 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
18e80 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
18e90 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
18ea0 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
18eb0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
18ec0 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
18ed0 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
18ee0 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
18ef0 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
18f00 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
18f10 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
18f20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
18f30 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
18f40 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
18f50 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
18f60 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
18f70 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
18f80 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
18f90 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
18fa0 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
18fb0 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
18fc0 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
18fd0 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
18fe0 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
18ff0 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
19000 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
19010 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
19020 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
19030 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
19040 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
19050 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
19060 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
19070 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
19080 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
19090 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  affinity;       
190a0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
190b0 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  y of the column 
190c0 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f  or 0 if not a co
190d0 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c  lumn */.  u32 fl
190e0 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
190f0 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67   /* Various flag
19100 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c  s.  EP_* See bel
19110 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ow */.  union {.
19120 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e      char *zToken
19130 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  ;          /* To
19140 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20  ken value. Zero 
19150 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64  terminated and d
19160 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69  equoted */.    i
19170 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20  nt iValue;      
19180 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67        /* Non-neg
19190 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61  ative integer va
191a0 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c  lue if EP_IntVal
191b0 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20  ue */.  } u;..  
191c0 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b  /* If the EP_Tok
191d0 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73  enOnly flag is s
191e0 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
191f0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
19200 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
19210 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
19220 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
19230 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
19240 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
19250 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
19260 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
19270 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
19280 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
19290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
192a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
192b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
192c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
192d0 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
192e0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
192f0 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
19300 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
19310 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
19320 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
19330 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
19340 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
19350 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
19360 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
19370 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
19380 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
19390 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
193a0 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
193b0 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
193c0 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
193d0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
193e0 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
193f0 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
19400 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
19410 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
19420 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
19430 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
19440 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
19450 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
19460 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
19470 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
19480 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
19490 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
194a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
194d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
194e0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
194f0 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
19500 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
19510 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
19520 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
19530 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
19540 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
19550 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
19560 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
19570 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
19580 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
19590 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
195c0 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
195f0 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
19600 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19620 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
19630 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
19640 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a  imes likelihood.
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
19670 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67 69 73  ELECT: 1st regis
19680 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65  ter of result ve
19690 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20  ctor */.  ynVar 
196a0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
196b0 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
196c0 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
196d0 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196f0 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
19700 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
19710 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
19720 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19740 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e  TK_SELECT_COLUMN
19750 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  : column of the 
19760 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f  result vector */
19770 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
19780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
19790 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
197a0 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
197b0 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
197c0 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
197d0 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
197e0 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
197f0 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
19800 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
19810 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
19820 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
19830 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
19840 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
19870 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
19880 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198a0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
198b0 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
198c0 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
198d0 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
198e0 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
198f0 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
19900 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
19910 49 4f 4e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ION */.  union {
19920 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
19930 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
19940 4b 5f 43 4f 4c 55 4d 4e 3a 20 54 61 62 6c 65 20  K_COLUMN: Table 
19950 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6c 75 6d  containing colum
19960 6e 2e 20 43 61 6e 20 62 65 20 4e 55 4c 4c 0a 20  n. Can be NULL. 
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72            ** for
19990 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20   a column of an 
199a0 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78 70 72  index on an expr
199b0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 57 69  ession */.    Wi
199c0 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20  ndow *pWin;     
199d0 20 20 20 20 20 2f 2a 20 54 4b 5f 46 55 4e 43 54       /* TK_FUNCT
199e0 49 4f 4e 3a 20 57 69 6e 64 6f 77 20 64 65 66 69  ION: Window defi
199f0 6e 69 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 66  nition for the f
19a00 75 6e 63 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  unc */.    struc
19a10 74 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  t {             
19a20 20 20 2f 2a 20 54 4b 5f 49 4e 2c 20 54 4b 5f 53    /* TK_IN, TK_S
19a30 45 4c 45 43 54 2c 20 61 6e 64 20 54 4b 5f 45 58  ELECT, and TK_EX
19a40 49 53 54 53 20 2a 2f 0a 20 20 20 20 20 20 69 6e  ISTS */.      in
19a50 74 20 69 41 64 64 72 3b 20 20 20 20 20 20 20 20  t iAddr;        
19a60 20 20 20 20 20 2f 2a 20 53 75 62 72 6f 75 74 69       /* Subrouti
19a70 6e 65 20 65 6e 74 72 79 20 61 64 64 72 65 73 73  ne entry address
19a80 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 72 65   */.      int re
19a90 67 52 65 74 75 72 6e 3b 20 20 20 20 20 20 20 20  gReturn;        
19aa0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73 65   /* Register use
19ab0 64 20 74 6f 20 68 6f 6c 64 20 72 65 74 75 72 6e  d to hold return
19ac0 20 61 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20   address */.    
19ad0 7d 20 73 75 62 3b 0a 20 20 7d 20 79 3b 0a 7d 3b  } sub;.  } y;.};
19ae0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
19af0 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
19b00 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
19b10 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
19b20 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
19b30 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
19b40 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
19b50 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49  inates in ON/USI
19b60 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74  NG clause of out
19b70 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
19b80 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
19b90 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
19ba0 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
19bb0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
19bc0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
19bd0 45 50 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30  EP_HasFunc   0x0
19be0 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e  00004 /* Contain
19bf0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75  s one or more fu
19c00 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b  nctions of any k
19c10 69 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ind */.#define E
19c20 50 5f 46 69 78 65 64 43 6f 6c 20 20 30 78 30 30  P_FixedCol  0x00
19c30 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d  0008 /* TK_Colum
19c40 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 66  n with a known f
19c50 69 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a 23 64  ixed value */.#d
19c60 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63  efine EP_Distinc
19c70 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41  t  0x000010 /* A
19c80 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
19c90 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20  n with DISTINCT 
19ca0 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
19cb0 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20  ne EP_VarSelect 
19cc0 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c  0x000020 /* pSel
19cd0 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ect is correlate
19ce0 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20  d, not constant 
19cf0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62  */.#define EP_Db
19d00 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30  lQuoted 0x000040
19d10 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20   /* token.z was 
19d20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e  originally in ".
19d30 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  .." */.#define E
19d40 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30  P_InfixFunc 0x00
19d50 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  0080 /* True for
19d60 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69   an infix functi
19d70 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20  on: LIKE, GLOB, 
19d80 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  etc */.#define E
19d90 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30  P_Collate   0x00
19da0 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0100 /* Tree con
19db0 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41  tains a TK_COLLA
19dc0 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  TE operator */.#
19dd0 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69  define EP_Generi
19de0 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20  c   0x000200 /* 
19df0 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f  Ignore COLLATE o
19e00 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68  r affinity on th
19e10 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69  is tree */.#defi
19e20 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20  ne EP_IntValue  
19e30 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65  0x000400 /* Inte
19e40 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
19e50 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
19e60 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
19e70 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30  sSelect 0x000800
19e80 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73   /* x.pSelect is
19e90 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73   valid (otherwis
19ea0 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f  e x.pList is) */
19eb0 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70  .#define EP_Skip
19ec0 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f        0x001000 /
19ed0 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f  * COLLATE, AS, o
19ee0 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64  r UNLIKELY */.#d
19ef0 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64  efine EP_Reduced
19f00 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45     0x002000 /* E
19f10 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
19f20 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65  REDUCEDSIZE byte
19f30 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
19f40 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30  e EP_TokenOnly 0
19f50 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20  x004000 /* Expr 
19f60 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45  struct EXPR_TOKE
19f70 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
19f80 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
19f90 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30  EP_Static    0x0
19fa0 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e  08000 /* Held in
19fb0 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
19fc0 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
19fd0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  () */.#define EP
19fe0 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30  _MemToken  0x010
19ff0 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  000 /* Need to s
1a000 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
1a010 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
1a020 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63  efine EP_NoReduc
1a030 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43  e  0x020000 /* C
1a040 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
1a050 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
1a060 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c  /.#define EP_Unl
1a070 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20  ikely  0x040000 
1a080 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72  /* unlikely() or
1a090 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75   likelihood() fu
1a0a0 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
1a0b0 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30  e EP_ConstFunc 0
1a0c0 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c  x080000 /* A SQL
1a0d0 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
1a0e0 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75  T or _SLOCHNG fu
1a0f0 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
1a100 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30  e EP_CanBeNull 0
1a110 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62  x100000 /* Can b
1a120 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e  e null despite N
1a130 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
1a140 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
1a150 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30  _Subquery  0x200
1a160 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  000 /* Tree cont
1a170 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54  ains a TK_SELECT
1a180 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65   operator */.#de
1a190 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20  fine EP_Alias   
1a1a0 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73    0x400000 /* Is
1a1b0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20   an alias for a 
1a1c0 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
1a1d0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
1a1e0 4c 65 61 66 20 20 20 20 20 20 30 78 38 30 30 30  Leaf      0x8000
1a1f0 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74  00 /* Expr.pLeft
1a200 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53  , .pRight, .u.pS
1a210 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a  elect all NULL *
1a220 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 57 69 6e  /.#define EP_Win
1a230 46 75 6e 63 20 20 30 78 31 30 30 30 30 30 30 20  Func  0x1000000 
1a240 2f 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20 77  /* TK_FUNCTION w
1a250 69 74 68 20 45 78 70 72 2e 79 2e 70 57 69 6e 20  ith Expr.y.pWin 
1a260 73 65 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  set */.#define E
1a270 50 5f 53 75 62 72 74 6e 20 20 20 30 78 32 30 30  P_Subrtn   0x200
1a280 30 30 30 30 20 2f 2a 20 55 73 65 73 20 45 78 70  0000 /* Uses Exp
1a290 72 2e 79 2e 73 75 62 2e 20 54 4b 5f 49 4e 2c 20  r.y.sub. TK_IN, 
1a2a0 5f 53 45 4c 45 43 54 2c 20 6f 72 20 5f 45 58 49  _SELECT, or _EXI
1a2b0 53 54 53 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  STS */../*.** Th
1a2c0 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 6d  e EP_Propagate m
1a2d0 61 73 6b 20 69 73 20 61 20 73 65 74 20 6f 66 20  ask is a set of 
1a2e0 70 72 6f 70 65 72 74 69 65 73 20 74 68 61 74 20  properties that 
1a2f0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72  automatically pr
1a300 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70 77 61 72  opagate.** upwar
1a310 64 73 20 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e  ds into parent n
1a320 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  odes..*/.#define
1a330 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45   EP_Propagate (E
1a340 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62  P_Collate|EP_Sub
1a350 71 75 65 72 79 7c 45 50 5f 48 61 73 46 75 6e 63  query|EP_HasFunc
1a360 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  )../*.** These m
1a370 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
1a380 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
1a390 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
1a3a0 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
1a3b0 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
1a3c0 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70  fine ExprHasProp
1a3d0 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28  erty(E,P)     ((
1a3e0 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21  (E)->flags&(P))!
1a3f0 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  =0).#define Expr
1a400 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45  HasAllProperty(E
1a410 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  ,P)  (((E)->flag
1a420 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
1a430 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70  fine ExprSetProp
1a440 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45  erty(E,P)     (E
1a450 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  )->flags|=(P).#d
1a460 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50  efine ExprClearP
1a470 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28  roperty(E,P)   (
1a480 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  E)->flags&=~(P).
1a490 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56  ./* The ExprSetV
1a4a0 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63  VAProperty() mac
1a4b0 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ro is used for V
1a4c0 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
1a4d0 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20  idation,.** and 
1a4e0 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e  Accreditation on
1a4f0 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69  ly.  It works li
1a500 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ke ExprSetProper
1a510 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a  ty() during VVA.
1a520 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74  ** processes but
1a530 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20   is a no-op for 
1a540 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66  delivery..*/.#if
1a550 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1a560 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
1a570 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
1a580 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28  )  (E)->flags|=(
1a590 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
1a5a0 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
1a5b0 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66  erty(E,P).#endif
1a5c0 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
1a5d0 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
1a5e0 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
1a5f0 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f  required by a no
1a600 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72  rmal Expr.** str
1a610 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
1a620 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
1a630 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
1a640 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a   in Expr.flags.*
1a650 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74  * and an Expr st
1a660 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
1a670 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
1a680 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
1a690 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20  EXPR_FULLSIZE   
1a6a0 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45          sizeof(E
1a6b0 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f  xpr)           /
1a6c0 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23  * Full size */.#
1a6d0 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55  define EXPR_REDU
1a6e0 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f  CEDSIZE        o
1a6f0 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61  ffsetof(Expr,iTa
1a700 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20  ble)  /* Common 
1a710 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66  features */.#def
1a720 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  ine EXPR_TOKENON
1a730 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73  LYSIZE      offs
1a740 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29  etof(Expr,pLeft)
1a750 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74     /* Fewer feat
1a760 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46  ures */../*.** F
1a770 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74  lags passed to t
1a780 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  he sqlite3ExprDu
1a790 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65  p() function. Se
1a7a0 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d  e the header com
1a7b0 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ment.** above sq
1a7c0 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
1a7d0 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
1a7e0 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
1a7f0 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
1a800 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
1a810 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
1a820 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
1a830 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
1a840 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
1a850 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
1a860 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
1a870 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
1a880 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
1a890 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
1a8a0 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
1a8b0 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
1a8c0 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
1a8d0 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
1a8e0 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
1a8f0 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
1a900 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
1a910 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
1a920 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
1a930 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
1a940 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
1a950 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
1a960 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
1a970 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
1a980 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
1a990 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
1a9a0 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
1a9b0 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
1a9c0 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
1a9d0 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
1a9e0 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
1a9f0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
1aa00 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
1aa10 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
1aa20 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
1aa30 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
1aa40 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
1aa50 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
1aa60 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
1aa70 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
1aa80 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
1aa90 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
1aaa0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
1aab0 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
1aac0 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
1aad0 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
1aae0 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
1aaf0 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
1ab00 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
1ab10 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
1ab20 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
1ab30 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
1ab40 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
1ab50 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
1ab60 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
1ab70 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
1ab80 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
1ab90 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
1aba0 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
1abb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1abc0 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
1abd0 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
1abe0 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
1abf0 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
1ac00 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
1ac10 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
1ac20 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
1ac30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ac40 54 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  The parse tree f
1ac50 6f 72 20 74 68 69 73 20 65 78 70 72 65 73 73 69  or this expressi
1ac60 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  on */.    char *
1ac70 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
1ac80 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
1ac90 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
1aca0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
1acb0 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
1acc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
1acd0 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
1ace0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
1acf0 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
1ad00 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
1ad10 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
1ad20 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
1ad30 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
1ad40 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
1ad50 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
1ad60 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
1ad70 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
1ad80 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
1ad90 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
1ada0 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
1adb0 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73  OLUMN */.    uns
1adc0 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a  igned reusable :
1add0 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  1;   /* Constant
1ade0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72   expression is r
1adf0 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  eusable */.    u
1ae00 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72 52  nsigned bSorterR
1ae10 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20  ef :1; /* Defer 
1ae20 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c  evaluation until
1ae30 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20 2a   after sorting *
1ae40 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
1ae50 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
1ae60 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
1ae70 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
1ae80 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
1ae90 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
1aea0 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
1aeb0 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
1aec0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1aed0 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
1aee0 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
1aef0 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
1af00 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
1af10 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
1af20 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
1af30 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
1af40 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
1af50 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  ;.  } a[1];     
1af60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1af70 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63  One slot for eac
1af80 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
1af90 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
1afa0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1afb0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
1afc0 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
1afd0 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
1afe0 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
1aff0 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
1b000 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
1b010 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
1b020 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
1b030 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
1b040 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
1b050 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
1b060 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
1b070 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
1b080 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
1b090 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
1b0a0 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
1b0b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
1b0c0 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
1b0d0 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
1b0e0 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
1b0f0 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
1b100 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
1b110 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
1b120 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
1b130 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
1b140 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
1b150 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1b160 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
1b170 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
1b180 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
1b190 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
1b1a0 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
1b1b0 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
1b1c0 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
1b1d0 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
1b1e0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1b1f0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
1b200 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
1b210 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
1b220 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1b230 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
1b240 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
1b250 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
1b260 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
1b270 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
1b280 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
1b290 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
1b2a0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
1b2b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1b2c0 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
1b2d0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
1b2e0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
1b2f0 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
1b300 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
1b310 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
1b320 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
1b330 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
1b340 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
1b350 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
1b360 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
1b370 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
1b380 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
1b390 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1b3a0 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
1b3b0 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
1b3c0 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
1b3d0 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
1b3e0 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
1b3f0 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
1b400 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
1b410 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
1b420 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
1b430 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
1b440 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
1b450 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
1b460 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
1b470 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
1b480 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
1b490 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
1b4a0 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
1b4b0 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
1b4c0 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
1b4d0 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
1b4e0 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
1b4f0 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
1b500 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
1b510 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
1b520 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
1b530 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
1b540 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
1b550 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
1b560 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
1b570 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
1b580 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
1b590 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
1b5a0 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
1b5b0 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
1b5c0 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
1b5d0 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
1b5e0 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
1b5f0 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  ious table..**.*
1b600 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64  * In the colUsed
1b610 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68   field, the high
1b620 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20  -order bit (bit 
1b630 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68  63) is set if th
1b640 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61  e table.** conta
1b650 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33  ins more than 63
1b660 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65   columns and the
1b670 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20   64-th or later 
1b680 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a  column is used..
1b690 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
1b6a0 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20  t {.  int nSrc; 
1b6b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b6c0 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
1b6d0 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
1b6e0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1b6f0 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   u32 nAlloc;    
1b700 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1b710 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
1b720 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f   in a[] below */
1b730 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  .  struct SrcLis
1b740 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68  t_item {.    Sch
1b750 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f  ema *pSchema;  /
1b760 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63  * Schema to whic
1b770 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66  h this item is f
1b780 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  ixed */.    char
1b790 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a   *zDatabase;  /*
1b7a0 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
1b7b0 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74  e holding this t
1b7c0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
1b7d0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
1b7e0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
1b7f0 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
1b800 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54  zAlias;     /* T
1b810 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61  he "B" part of a
1b820 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65   "A AS B" phrase
1b830 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  .  zName is the 
1b840 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  "A" */.    Table
1b850 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
1b860 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72  An SQL table cor
1b870 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e  responding to zN
1b880 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ame */.    Selec
1b890 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20  t *pSelect;  /* 
1b8a0 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
1b8b0 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  nt used in place
1b8c0 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
1b8d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
1b8e0 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64  FillSub;  /* Add
1b8f0 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69  ress of subrouti
1b900 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61  ne to manifest a
1b910 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20   subquery */.   
1b920 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
1b930 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1b940 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64  olding return ad
1b950 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c  dress of addrFil
1b960 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  lSub */.    int 
1b970 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a  regResult;    /*
1b980 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   Registers holdi
1b990 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  ng results of a 
1b9a0 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1b9b0 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
1b9c0 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
1b9d0 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
1b9e0 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
1b9f0 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
1ba00 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20  evious */.      
1ba10 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
1ba20 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
1ba30 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
1ba40 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
1ba50 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  use */.      uns
1ba60 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42  igned isIndexedB
1ba70 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  y :1;   /* True 
1ba80 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49  if there is an I
1ba90 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
1baa0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1bab0 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b  ed isTabFunc :1;
1bac0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1bad0 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
1bae0 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a  ction syntax */.
1baf0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1bb00 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20  sCorrelated :1; 
1bb10 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d   /* True if sub-
1bb20 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61  query is correla
1bb30 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ted */.      uns
1bb40 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69  igned viaCorouti
1bb50 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65  ne :1;  /* Imple
1bb60 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72  mented as a co-r
1bb70 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20  outine */.      
1bb80 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72  unsigned isRecur
1bb90 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72  sive :1;   /* Tr
1bba0 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  ue for recursive
1bbb0 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49   reference in WI
1bbc0 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a  TH */.    } fg;.
1bbd0 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
1bbe0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
1bbf0 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
1bc00 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
1bc10 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
1bc20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
1bc30 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
1bc40 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
1bc50 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
1bc60 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
1bc70 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
1bc80 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
1bc90 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
1bca0 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
1bcb0 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
1bcc0 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
1bcd0 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
1bce0 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65     char *zIndexe
1bcf0 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74  dBy;    /* Ident
1bd00 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45  ifier from "INDE
1bd10 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22  XED BY <zIndex>"
1bd20 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1bd30 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63   ExprList *pFunc
1bd40 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e  Arg;  /* Argumen
1bd50 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75  ts to table-valu
1bd60 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ed-function */. 
1bd70 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64     } u1;.    Ind
1bd80 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f  ex *pIBIndex;  /
1bd90 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  * Index structur
1bda0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1bdb0 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79  to u1.zIndexedBy
1bdc0 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   */.  } a[1];   
1bdd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1bde0 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
1bdf0 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
1be00 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
1be10 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
1be20 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
1be30 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
1be40 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
1be50 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
1be60 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
1be70 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
1be80 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
1be90 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20  fine JT_CROSS   
1bea0 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45    0x0002    /* E
1beb0 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74  xplicit use of t
1bec0 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64  he CROSS keyword
1bed0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e   */.#define JT_N
1bee0 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20  ATURAL   0x0004 
1bef0 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
1bf00 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20   "natural" join 
1bf10 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45  */.#define JT_LE
1bf20 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20  FT      0x0008  
1bf30 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20    /* Left outer 
1bf40 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1bf50 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30  JT_RIGHT     0x0
1bf60 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20  010    /* Right 
1bf70 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
1bf80 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20  efine JT_OUTER  
1bf90 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20     0x0020    /* 
1bfa0 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77  The "OUTER" keyw
1bfb0 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
1bfc0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52  /.#define JT_ERR
1bfd0 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20  OR     0x0040   
1bfe0 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75   /* unknown or u
1bff0 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20  nsupported join 
1c000 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  type */.../*.** 
1c010 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
1c020 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46  e for the wctrlF
1c030 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f  lags parameter o
1c040 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65  f sqlite3WhereBe
1c050 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65  gin().** and the
1c060 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c   WhereInfo.wctrl
1c070 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a  Flags member..**
1c080 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1c090 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
1c0a0 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
1c0b0 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53 45 5f  *     WHERE_USE_
1c0c0 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69 78  LIMIT  == SF_Fix
1c0d0 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69  edLimit.*/.#defi
1c0e0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1c0f0 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30  _NORMAL   0x0000
1c100 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65   /* No-op */.#de
1c110 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1c120 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30  BY_MIN      0x00
1c130 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  01 /* ORDER BY p
1c140 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69  rocessing for mi
1c150 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  n() func */.#def
1c160 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1c170 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30  Y_MAX      0x000
1c180 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  2 /* ORDER BY pr
1c190 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78  ocessing for max
1c1a0 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
1c1b0 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
1c1c0 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34  _DESIRED  0x0004
1c1d0 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f   /* Want to do o
1c1e0 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44  ne-pass UPDATE/D
1c1f0 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
1c200 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d   WHERE_ONEPASS_M
1c210 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20 2f  ULTIROW 0x0008 /
1c220 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20  * ONEPASS is ok 
1c230 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f  with multiple ro
1c240 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ws */.#define WH
1c250 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
1c260 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 4f  K    0x0010 /* O
1c270 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
1c280 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
1c290 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c2a0 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20 20  E_OR_SUBCLAUSE  
1c2b0 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72 6f     0x0020 /* Pro
1c2c0 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57 48  cessing a sub-WH
1c2d0 45 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a 20  ERE as part of. 
1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c300 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f       ** the OR o
1c310 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a  ptimization  */.
1c320 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52  #define WHERE_GR
1c330 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30  OUPBY          0
1c340 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72 42  x0040 /* pOrderB
1c350 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52  y is really a GR
1c360 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
1c370 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1c380 42 59 20 20 20 20 20 20 20 30 78 30 30 38 30 20  BY       0x0080 
1c390 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72  /* pOrderby is r
1c3a0 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54  eally a DISTINCT
1c3b0 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
1c3c0 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49  ne WHERE_WANT_DI
1c3d0 53 54 49 4e 43 54 20 20 20 20 30 78 30 31 30 30  STINCT    0x0100
1c3e0 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e   /* All output n
1c3f0 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69  eeds to be disti
1c400 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nct */.#define W
1c410 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50  HERE_SORTBYGROUP
1c420 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20        0x0200 /* 
1c430 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57  Support sqlite3W
1c440 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a  hereIsSorted() *
1c450 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c460 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20 20  SEEK_TABLE      
1c470 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f   0x0400 /* Do no
1c480 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f 6e  t defer seeks on
1c490 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23   main table */.#
1c4a0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1c4b0 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30 78  ERBY_LIMIT    0x
1c4c0 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b  0800 /* ORDERBY+
1c4d0 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e  LIMIT on the inn
1c4e0 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69  er loop */.#defi
1c4f0 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e  ne WHERE_SEEK_UN
1c500 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30 30 30  IQ_TABLE  0x1000
1c510 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72   /* Do not defer
1c520 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71 75 65   seeks if unique
1c530 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
1c540 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
1c550 20 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74     0x2000    not
1c560 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20   currently used 
1c570 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c580 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20  _USE_LIMIT      
1c590 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20    0x4000 /* Use 
1c5a0 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73  the LIMIT in cos
1c5b0 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20  t estimates */. 
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
1c5e0 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72  8000    not curr
1c5f0 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f  ently used */../
1c600 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
1c610 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
1c620 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
1c630 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  nct().*/.#define
1c640 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1c650 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20  NOOP      0  /* 
1c660 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
1c670 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65   not used */.#de
1c680 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1c690 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20  NCT_UNIQUE    1 
1c6a0 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65   /* No duplicate
1c6b0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
1c6c0 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45  RE_DISTINCT_ORDE
1c6d0 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20  RED   2  /* All 
1c6e0 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61  duplicates are a
1c6f0 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69  djacent */.#defi
1c700 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1c710 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f  T_UNORDERED 3  /
1c720 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65  * Duplicates are
1c730 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f   scattered */../
1c740 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65  *.** A NameConte
1c750 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e  xt defines a con
1c760 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f  text in which to
1c770 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61   resolve table a
1c780 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d  nd column.** nam
1c790 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74  es.  The context
1c7a0 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c   consists of a l
1c7b0 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74  ist of tables (t
1c7c0 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65  he pSrcList) fie
1c7d0 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74  ld and.** a list
1c7e0 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73   of named expres
1c7f0 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20  sion (pEList).  
1c800 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73  The named expres
1c810 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a  sion list may.**
1c820 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70   be NULL.  The p
1c830 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  Src corresponds 
1c840 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  to the FROM clau
1c850 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f  se of a SELECT o
1c860 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c  r.** to the tabl
1c870 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  e being operated
1c880 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55   on by INSERT, U
1c890 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45  PDATE, or DELETE
1c8a0 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74  .  The.** pEList
1c8b0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1c8c0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
1c8d0 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69  f a SELECT and i
1c8e0 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74  s NULL for.** ot
1c8f0 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  her statements..
1c900 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  **.** NameContex
1c910 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64  ts can be nested
1c920 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e  .  When resolvin
1c930 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e  g names, the inn
1c940 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65  er-most.** conte
1c950 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
1c960 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
1c970 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
1c980 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
1c990 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
1c9a0 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
1c9b0 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
1c9c0 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
1c9d0 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
1c9e0 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
1c9f0 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
1ca00 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
1ca10 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
1ca20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
1ca30 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
1ca40 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
1ca50 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
1ca60 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
1ca70 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
1ca80 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
1ca90 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  d..**.** Each su
1caa0 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
1cab0 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
1cac0 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
1cad0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
1cae0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
1caf0 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
1cb00 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
1cb10 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
1cb20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
1cb30 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
1cb40 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
1cb50 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
1cb60 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
1cb70 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
1cb80 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
1cb90 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
1cba0 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
1cbb0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
1cbc0 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
1cbd0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1cbe0 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
1cbf0 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
1cc00 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
1cc10 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  s */.  union {. 
1cc20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c     ExprList *pEL
1cc30 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
1cc40 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75  nal list of resu
1cc50 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt-set columns *
1cc60 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f 20 2a 70  /.    AggInfo *p
1cc70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e  AggInfo;   /* In
1cc80 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1cc90 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68  aggregates at th
1cca0 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  is level */.    
1ccb0 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b  Upsert *pUpsert;
1ccc0 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c       /* ON CONFL
1ccd0 49 43 54 20 63 6c 61 75 73 65 20 69 6e 66 6f 72  ICT clause infor
1cce0 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75  mation from an u
1ccf0 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43  psert */.  } uNC
1cd00 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  ;.  NameContext 
1cd10 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
1cd20 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74   outer name cont
1cd30 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f  ext.  NULL for o
1cd40 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e  utermost */.  in
1cd50 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
1cd60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1cd70 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62  names resolved b
1cd80 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a  y this context *
1cd90 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
1cda0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1cdb0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63  er of errors enc
1cdc0 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72  ountered while r
1cdd0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a  esolving names *
1cde0 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b  /.  u16 ncFlags;
1cdf0 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f           /* Zero
1ce00 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c   or more NC_* fl
1ce10 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ags defined belo
1ce20 77 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  w */.  Select *p
1ce30 57 69 6e 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53  WinSelect;  /* S
1ce40 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1ce50 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f 77 20 66  for any window f
1ce60 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
1ce70 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1ce80 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d  lues for the Nam
1ce90 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67  eContext, ncFlag
1cea0 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56  s field..**.** V
1ceb0 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1cec0 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69   (all checked vi
1ced0 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
1cee0 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20     NC_HasAgg    
1cef0 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20  == SF_HasAgg.** 
1cf00 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20     NC_MinMaxAgg 
1cf10 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20  == SF_MinMaxAgg 
1cf20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  == SQLITE_FUNC_M
1cf30 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66  INMAX.**.*/.#def
1cf40 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
1cf50 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72   0x0001  /* Aggr
1cf60 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
1cf70 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
1cf80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50   */.#define NC_P
1cf90 61 72 74 49 64 78 20 20 20 30 78 30 30 30 32 20  artIdx   0x0002 
1cfa0 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1cfb0 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20  lving a partial 
1cfc0 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23  index WHERE */.#
1cfd0 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63  define NC_IsChec
1cfe0 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54  k   0x0004  /* T
1cff0 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
1d000 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43   names in a CHEC
1d010 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  K constraint */.
1d020 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67  #define NC_InAgg
1d030 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20  Func 0x0008  /* 
1d040 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e  True if analyzin
1d050 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61  g arguments to a
1d060 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64  n agg func */.#d
1d070 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20  efine NC_HasAgg 
1d080 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e     0x0010  /* On
1d090 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
1d0a0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65  ate functions se
1d0b0 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  en */.#define NC
1d0c0 5f 49 64 78 45 78 70 72 20 20 20 30 78 30 30 32  _IdxExpr   0x002
1d0d0 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  0  /* True if re
1d0e0 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  solving columns 
1d0f0 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  of CREATE INDEX 
1d100 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56 61  */.#define NC_Va
1d110 72 53 65 6c 65 63 74 20 30 78 30 30 34 30 20 20  rSelect 0x0040  
1d120 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74 65 64 20  /* A correlated 
1d130 73 75 62 71 75 65 72 79 20 68 61 73 20 62 65 65  subquery has bee
1d140 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  n seen */.#defin
1d150 65 20 4e 43 5f 55 45 4c 69 73 74 20 20 20 20 30  e NC_UEList    0
1d160 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20 69  x0080  /* True i
1d170 66 20 75 4e 43 2e 70 45 4c 69 73 74 20 69 73 20  f uNC.pEList is 
1d180 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1d190 4e 43 5f 55 41 67 67 49 6e 66 6f 20 20 30 78 30  NC_UAggInfo  0x0
1d1a0 31 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  100  /* True if 
1d1b0 75 4e 43 2e 70 41 67 67 49 6e 66 6f 20 69 73 20  uNC.pAggInfo is 
1d1c0 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1d1d0 4e 43 5f 55 55 70 73 65 72 74 20 20 20 30 78 30  NC_UUpsert   0x0
1d1e0 32 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  200  /* True if 
1d1f0 75 4e 43 2e 70 55 70 73 65 72 74 20 69 73 20 75  uNC.pUpsert is u
1d200 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  sed */.#define N
1d210 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30  C_MinMaxAgg 0x10
1d220 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61  00  /* min/max a
1d230 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20  ggregates seen. 
1d240 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20   See note above 
1d250 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f  */.#define NC_Co
1d260 6d 70 6c 65 78 20 20 20 30 78 32 30 30 30 20 20  mplex   0x2000  
1d270 2f 2a 20 54 72 75 65 20 69 66 20 61 20 66 75 6e  /* True if a fun
1d280 63 74 69 6f 6e 20 6f 72 20 73 75 62 71 75 65 72  ction or subquer
1d290 79 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  y seen */.#defin
1d2a0 65 20 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30  e NC_AllowWin  0
1d2b0 78 34 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77  x4000  /* Window
1d2c0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
1d2d0 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 0a  llowed here */..
1d2e0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1d2f0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1d300 6e 67 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69  ng object descri
1d310 62 65 73 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20  bes a single ON 
1d320 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75  CONFLICT.** clau
1d330 73 65 20 69 6e 20 61 6e 20 75 70 73 65 72 74 2e  se in an upsert.
1d340 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 55 70 73 65  .**.** The pUpse
1d350 72 74 54 61 72 67 65 74 20 66 69 65 6c 64 20 69  rtTarget field i
1d360 73 20 6f 6e 6c 79 20 73 65 74 20 69 66 20 74 68  s only set if th
1d370 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  e ON CONFLICT cl
1d380 61 75 73 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a  ause includes.**
1d390 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74   conflict-target
1d3a0 20 63 6c 61 75 73 65 2e 20 20 28 49 6e 20 22 4f   clause.  (In "O
1d3b0 4e 20 43 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22  N CONFLICT(a,b)"
1d3c0 20 74 68 65 20 22 28 61 2c 62 29 22 20 69 73 20   the "(a,b)" is 
1d3d0 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d  the.** conflict-
1d3e0 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e 29 20  target clause.) 
1d3f0 20 54 68 65 20 70 55 70 73 65 72 74 54 61 72 67   The pUpsertTarg
1d400 65 74 57 68 65 72 65 20 69 73 20 74 68 65 20 6f  etWhere is the o
1d410 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45  ptional.** WHERE
1d420 20 63 6c 61 75 73 65 20 75 73 65 64 20 74 6f 20   clause used to 
1d430 69 64 65 6e 74 69 66 79 20 70 61 72 74 69 61 6c  identify partial
1d440 20 75 6e 69 71 75 65 20 69 6e 64 65 78 65 73 2e   unique indexes.
1d450 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65 72 74 53 65  .**.** pUpsertSe
1d460 74 20 69 73 20 74 68 65 20 6c 69 73 74 20 6f 66  t is the list of
1d470 20 63 6f 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72   column=expr ter
1d480 6d 73 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  ms of the UPDATE
1d490 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20   statement. .** 
1d4a0 54 68 65 20 70 55 70 73 65 72 74 53 65 74 20 66  The pUpsertSet f
1d4b0 69 65 6c 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72  ield is NULL for
1d4c0 20 61 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44   a ON CONFLICT D
1d4d0 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a  O NOTHING.  The.
1d4e0 2a 2a 20 70 55 70 73 65 72 74 57 68 65 72 65 20  ** pUpsertWhere 
1d4f0 69 73 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  is the WHERE cla
1d500 75 73 65 20 66 6f 72 20 74 68 65 20 55 50 44 41  use for the UPDA
1d510 54 45 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69  TE and is NULL i
1d520 66 20 74 68 65 0a 2a 2a 20 57 48 45 52 45 20 63  f the.** WHERE c
1d530 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64  lause is omitted
1d540 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 70 73 65  ..*/.struct Upse
1d550 72 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  rt {.  ExprList 
1d560 2a 70 55 70 73 65 72 74 54 61 72 67 65 74 3b 20  *pUpsertTarget; 
1d570 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73   /* Optional des
1d580 63 72 69 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66  cription of conf
1d590 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  licting index */
1d5a0 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65 72 74  .  Expr *pUpsert
1d5b0 54 61 72 67 65 74 57 68 65 72 65 3b 20 2f 2a 20  TargetWhere; /* 
1d5c0 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
1d5d0 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 74   partial index t
1d5e0 61 72 67 65 74 73 20 2a 2f 0a 20 20 45 78 70 72  argets */.  Expr
1d5f0 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53 65 74  List *pUpsertSet
1d600 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 53 45 54  ;     /* The SET
1d610 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 61 6e 20   clause from an 
1d620 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41  ON CONFLICT UPDA
1d630 54 45 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55  TE */.  Expr *pU
1d640 70 73 65 72 74 57 68 65 72 65 3b 20 20 20 20 20  psertWhere;     
1d650 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
1d660 65 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e  e for the ON CON
1d670 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a  FLICT UPDATE */.
1d680 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20    /* The fields 
1d690 61 62 6f 76 65 20 63 6f 6d 70 72 69 73 65 20 74  above comprise t
1d6a0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
1d6b0 72 20 74 68 65 20 75 70 73 65 72 74 20 63 6c 61  r the upsert cla
1d6c0 75 73 65 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69  use..  ** The fi
1d6d0 65 6c 64 73 20 62 65 6c 6f 77 20 61 72 65 20 75  elds below are u
1d6e0 73 65 64 20 74 6f 20 74 72 61 6e 73 66 65 72 20  sed to transfer 
1d6f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
1d700 20 74 68 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a   the INSERT.  **
1d710 20 70 72 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e   processing down
1d720 20 69 6e 74 6f 20 74 68 65 20 55 50 44 41 54 45   into the UPDATE
1d730 20 70 72 6f 63 65 73 73 69 6e 67 20 77 68 69 6c   processing whil
1d740 65 20 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 64  e generating cod
1d750 65 2e 0a 20 20 2a 2a 20 55 70 73 65 72 74 20 6f  e..  ** Upsert o
1d760 77 6e 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  wns the memory a
1d770 6c 6c 6f 63 61 74 65 64 20 61 62 6f 76 65 2c 20  llocated above, 
1d780 62 75 74 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f  but not the memo
1d790 72 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49  ry below. */.  I
1d7a0 6e 64 65 78 20 2a 70 55 70 73 65 72 74 49 64 78  ndex *pUpsertIdx
1d7b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73  ;        /* Cons
1d7c0 74 72 61 69 6e 74 20 74 68 61 74 20 70 55 70 73  traint that pUps
1d7d0 65 72 74 54 61 72 67 65 74 20 69 64 65 6e 74 69  ertTarget identi
1d7e0 66 69 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73  fies */.  SrcLis
1d7f0 74 20 2a 70 55 70 73 65 72 74 53 72 63 3b 20 20  t *pUpsertSrc;  
1d800 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20      /* Table to 
1d810 62 65 20 75 70 64 61 74 65 64 20 2a 2f 0a 20 20  be updated */.  
1d820 69 6e 74 20 72 65 67 44 61 74 61 3b 20 20 20 20  int regData;    
1d830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
1d840 73 74 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64  st register hold
1d850 69 6e 67 20 61 72 72 61 79 20 6f 66 20 56 41 4c  ing array of VAL
1d860 55 45 53 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61  UES */.  int iDa
1d870 74 61 43 75 72 3b 20 20 20 20 20 20 20 20 20 20  taCur;          
1d880 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1d890 68 65 20 64 61 74 61 20 63 75 72 73 6f 72 20 2a  he data cursor *
1d8a0 2f 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b  /.  int iIdxCur;
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d8c0 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69   Index of the fi
1d8d0 72 73 74 20 69 6e 64 65 78 20 63 75 72 73 6f 72  rst index cursor
1d8e0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
1d8f0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1d900 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1d910 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c  ture contains al
1d920 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  l information.**
1d930 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
1d940 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73  ate code for a s
1d950 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61  ingle SELECT sta
1d960 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65  tement..**.** Se
1d970 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d  e the header com
1d980 6d 65 6e 74 20 6f 6e 20 74 68 65 20 63 6f 6d 70  ment on the comp
1d990 75 74 65 4c 69 6d 69 74 52 65 67 69 73 74 65 72  uteLimitRegister
1d9a0 73 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  s() routine for 
1d9b0 61 0a 2a 2a 20 64 65 74 61 69 6c 65 64 20 64 65  a.** detailed de
1d9c0 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65  scription of the
1d9d0 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20   meaning of the 
1d9e0 69 4c 69 6d 69 74 20 61 6e 64 20 69 4f 66 66 73  iLimit and iOffs
1d9f0 65 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a  et fields..**.**
1da00 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
1da10 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
1da20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
1da30 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1da40 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
1da50 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
1da60 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
1da70 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
1da80 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
1da90 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
1daa0 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
1dab0 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
1dac0 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
1dad0 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
1dae0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
1daf0 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
1db00 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
1db10 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
1db20 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
1db30 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
1db40 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
1db50 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
1db60 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
1db70 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
1db80 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
1db90 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
1dba0 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
1dbb0 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
1dbc0 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
1dbd0 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
1dbe0 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
1dbf0 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
1dc00 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20  addrOpenEphm[2] 
1dc10 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
1dc20 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
1dc30 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
1dc40 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
1dc50 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
1dc60 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1dc70 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
1dc80 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
1dc90 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dcb0 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
1dcc0 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
1dcd0 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
1dce0 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65  /.  LogEst nSele
1dcf0 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  ctRow;     /* Es
1dd00 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
1dd10 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
1dd20 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b  .  u32 selFlags;
1dd30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
1dd40 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73  ious SF_* values
1dd50 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74   */.  int iLimit
1dd60 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20  , iOffset;   /* 
1dd70 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  Memory registers
1dd80 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26   holding LIMIT &
1dd90 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73   OFFSET counters
1dda0 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 49 64 3b   */.  u32 selId;
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ddc0 55 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65  Unique identifie
1ddd0 72 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  r number for thi
1dde0 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 69 6e  s SELECT */.  in
1ddf0 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  t addrOpenEphm[2
1de00 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45  ];   /* OP_OpenE
1de10 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c  phem opcodes rel
1de20 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ated to this sel
1de30 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ect */.  SrcList
1de40 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20   *pSrc;         
1de50 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75  /* The FROM clau
1de60 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  se */.  Expr *pW
1de70 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f  here;          /
1de80 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1de90 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
1dea0 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f   *pGroupBy;    /
1deb0 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63  * The GROUP BY c
1dec0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
1ded0 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20  *pHaving;       
1dee0 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20    /* The HAVING 
1def0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1df00 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
1df10 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20     /* The ORDER 
1df20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53  BY clause */.  S
1df30 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20  elect *pPrior;  
1df40 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73        /* Prior s
1df50 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
1df60 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
1df70 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ment */.  Select
1df80 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
1df90 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20   /* Next select 
1dfa0 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61  to the left in a
1dfb0 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45   compound */.  E
1dfc0 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20  xpr *pLimit;    
1dfd0 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65        /* LIMIT e
1dfe0 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
1dff0 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
1e000 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1e010 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
1e020 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63  ITH clause attac
1e030 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  hed to this sele
1e040 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a  ct. Or NULL. */.
1e050 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1e060 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20  MIT_WINDOWFUNC. 
1e070 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20   Window *pWin;  
1e080 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1e090 6f 66 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  of window functi
1e0a0 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20  ons */.  Window 
1e0b0 2a 70 57 69 6e 44 65 66 6e 3b 20 20 20 20 20 20  *pWinDefn;      
1e0c0 2f 2a 20 4c 69 73 74 20 6f 66 20 6e 61 6d 65 64  /* List of named
1e0d0 20 77 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69   window definiti
1e0e0 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ons */.#endif.};
1e0f0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1e100 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63  values for Selec
1e110 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65  t.selFlags.  The
1e120 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61   "SF" prefix sta
1e130 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65  nds for.** "Sele
1e140 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20  ct Flag"..**.** 
1e150 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
1e160 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76  s (all checked v
1e170 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20  ia assert()).** 
1e180 20 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20      SF_HasAgg   
1e190 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a    == NC_HasAgg.*
1e1a0 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41  *     SF_MinMaxA
1e1b0 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78  gg  == NC_MinMax
1e1c0 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54  Agg     == SQLIT
1e1d0 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a  E_FUNC_MINMAX.**
1e1e0 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d       SF_FixedLim
1e1f0 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f  it == WHERE_USE_
1e200 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT.*/.#define
1e210 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20   SF_Distinct    
1e220 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f     0x00001  /* O
1e230 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
1e240 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
1e250 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20  ine SF_All      
1e260 20 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f        0x00002  /
1e270 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41  * Includes the A
1e280 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  LL keyword */.#d
1e290 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
1e2a0 64 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20  d       0x00004 
1e2b0 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
1e2c0 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
1e2d0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
1e2e0 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
1e2f0 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74  0x00008  /* Cont
1e300 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f  ains agg functio
1e310 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59  ns or a GROUP BY
1e320 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48   */.#define SF_H
1e330 61 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78  asAgg         0x
1e340 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69  00010  /* Contai
1e350 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
1e360 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
1e370 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72  e SF_UsesEphemer
1e380 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20  al  0x00020  /* 
1e390 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68  Uses the OpenEph
1e3a0 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f  emeral opcode */
1e3b0 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61  .#define SF_Expa
1e3c0 6e 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30  nded       0x000
1e3d0 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65  40  /* sqlite3Se
1e3e0 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c  lectExpand() cal
1e3f0 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23  led on this */.#
1e400 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70  define SF_HasTyp
1e410 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30  eInfo    0x00080
1e420 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65    /* FROM subque
1e430 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20  ries have Table 
1e440 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66  metadata */.#def
1e450 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20  ine SF_Compound 
1e460 20 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f        0x00100  /
1e470 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70  * Part of a comp
1e480 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64  ound query */.#d
1e490 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20  efine SF_Values 
1e4a0 20 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20          0x00200 
1e4b0 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20   /* Synthesized 
1e4c0 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75  from VALUES clau
1e4d0 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
1e4e0 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20  _MultiValue     
1e4f0 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67  0x00400  /* Sing
1e500 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77  le VALUES term w
1e510 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
1e520 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1e530 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30  NestedFrom     0
1e540 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20  x00800  /* Part 
1e550 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  of a parenthesiz
1e560 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  ed FROM clause *
1e570 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e  /.#define SF_Min
1e580 4d 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31  MaxAgg      0x01
1e590 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74  000  /* Aggregat
1e5a0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e  e containing min
1e5b0 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23  () or max() */.#
1e5c0 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73  define SF_Recurs
1e5d0 69 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30  ive      0x02000
1e5e0 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69    /* The recursi
1e5f0 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63  ve part of a rec
1e600 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64  ursive CTE */.#d
1e610 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69  efine SF_FixedLi
1e620 6d 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20  mit     0x04000 
1e630 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73   /* nSelectRow s
1e640 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74  et by a constant
1e650 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e   LIMIT */.#defin
1e660 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72  e SF_MaybeConver
1e670 74 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20  t   0x08000  /* 
1e680 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70  Need convertComp
1e690 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1e6a0 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1e6b0 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20  e SF_Converted  
1e6c0 20 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20      0x10000  /* 
1e6d0 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  By convertCompou
1e6e0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1e6f0 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1e700 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e  SF_IncludeHidden
1e710 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e    0x20000  /* In
1e720 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c  clude hidden col
1e730 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a  umns in output *
1e740 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d  /.#define SF_Com
1e750 70 6c 65 78 52 65 73 75 6c 74 20 20 30 78 34 30  plexResult  0x40
1e760 30 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63  000  /* Result c
1e770 6f 6e 74 61 69 6e 73 20 73 75 62 71 75 65 72 79  ontains subquery
1e780 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a   or function */.
1e790 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  ./*.** The resul
1e7a0 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63  ts of a SELECT c
1e7b0 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65  an be distribute
1e7c0 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
1e7d0 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a  s, as defined.**
1e7e0 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   by one of the f
1e7f0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e  ollowing macros.
1e800 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66    The "SRT" pref
1e810 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54  ix means "SELECT
1e820 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22   Result.** Type"
1e830 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e840 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72  Union       Stor
1e850 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b  e results as a k
1e860 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ey in a temporar
1e870 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20  y index.**      
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1e890 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
1e8a0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1e8b0 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
1e8c0 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
1e8d0 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
1e8e0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
1e8f0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1e900 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
1e910 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
1e920 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
1e930 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
1e940 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
1e950 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e960 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
1e970 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
1e980 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
1e990 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
1e9a0 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
1e9b0 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
1e9c0 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
1e9d0 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1e9e0 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
1e9f0 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
1ea00 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
1ea30 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
1ea40 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
1ea50 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
1ea60 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
1ea70 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1ea80 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
1ea90 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
1eaa0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1eab0 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1eac0 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1ead0 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
1eae0 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
1eaf0 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
1eb00 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1eb10 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
1eb20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
1eb30 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
1eb40 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
1eb50 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
1eb60 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
1eb70 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
1eb80 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
1eb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1eba0 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
1ebb0 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
1ebc0 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebe0 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
1ebf0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
1ec00 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
1ec10 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
1ec20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1ec30 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
1ec40 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
1ec50 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
1ec60 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
1ec70 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
1ec80 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
1ec90 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
1eca0 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecc0 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
1ecd0 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
1ece0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1ecf0 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1ed00 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74           Apply t
1ed10 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73  he affinity pDes
1ed20 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72  t->affSdst befor
1ed30 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20  e storing.**    
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed50 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20   results.  Used 
1ed60 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e  to implement "IN
1ed70 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a   (SELECT ...)"..
1ed80 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70  **.**     SRT_Ep
1ed90 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65  hemTab    Create
1eda0 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   an temporary ta
1edb0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1edc0 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20  rm and store.** 
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ede0 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74      the result t
1edf0 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72  here. The cursor
1ee00 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66   is left open af
1ee10 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ter.**          
1ee20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1ee30 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c  ning.  This is l
1ee40 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78  ike SRT_Table ex
1ee50 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20  cept that.**    
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee70 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   this destinatio
1ee80 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70  n uses OP_OpenEp
1ee90 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74  hemeral to creat
1eea0 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1eeb0 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62           the tab
1eec0 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20  le first..**.** 
1eed0 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e      SRT_Coroutin
1eee0 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63  e   Generate a c
1eef0 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  o-routine that r
1ef00 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77  eturns a new row
1ef10 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   of.**          
1ef20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1ef30 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20  ts each time it 
1ef40 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65  is invoked.  The
1ef50 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20   entry point.** 
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef70 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f      of the co-ro
1ef80 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20  utine is stored 
1ef90 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
1efa0 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20  t->iSDParm.**   
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efc0 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74    and the result
1efd0 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69   row is stored i
1efe0 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72  n pDest->nDest r
1eff0 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20  egisters.**     
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f010 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44  starting with pD
1f020 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a  est->iSdst..**.*
1f030 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20  *     SRT_Table 
1f040 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1f050 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  lts in temporary
1f060 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1f070 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52  DParm..**     SR
1f080 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68  T_Fifo        Th
1f090 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45  is is like SRT_E
1f0a0 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74  phemTab except t
1f0b0 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a  hat the table.**
1f0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0d0 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20       is assumed 
1f0e0 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70  to already be op
1f0f0 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61  en.  SRT_Fifo ha
1f100 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1f110 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64           the add
1f120 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79  itional property
1f130 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74   of being able t
1f140 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20  o ignore.**     
1f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f160 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1f170 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1f180 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53  RT_DistFifo    S
1f190 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1f1a0 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
1f1b0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1f1c0 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1f1d0 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73           But als
1f1e0 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  o use temporary 
1f1f0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1f200 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20  Parm+1 as.**    
1f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f220 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c   a record of all
1f230 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61   prior results a
1f240 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75  nd ignore any du
1f250 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20  plicate.**      
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f270 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73  ows.  Name means
1f280 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66  :  "Distinct Fif
1f290 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  o"..**.**     SR
1f2a0 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74  T_Queue       St
1f2b0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1f2c0 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1f2d0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65  est->iSDParm (re
1f2e0 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  ally.**         
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69              an i
1f300 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61  ndex).  Append a
1f310 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1f320 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74   so that all ent
1f330 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ries.**         
1f340 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20              are 
1f350 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20  distinct..**.** 
1f360 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75      SRT_DistQueu
1f370 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74  e   Store result
1f380 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1f390 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1f3a0 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20  rm only if.**   
1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3c0 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72    the same recor
1f3d0 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e  d has never been
1f3e0 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20   stored before. 
1f3f0 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20   The.**         
1f400 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
1f410 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50  x at pDest->iSDP
1f420 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70  arm+1 hold all p
1f430 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a  rior stores..*/.
1f440 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f  #define SRT_Unio
1f450 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53  n        1  /* S
1f460 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b  tore result as k
1f470 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1f480 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1f490 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f  xcept       2  /
1f4a0 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20  * Remove result 
1f4b0 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64  from a UNION ind
1f4c0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1f4d0 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33  T_Exists       3
1f4e0 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20    /* Store 1 if 
1f4f0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f  the result is no
1f500 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  t empty */.#defi
1f510 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20  ne SRT_Discard  
1f520 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74      4  /* Do not
1f530 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   save the result
1f540 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64  s anywhere */.#d
1f550 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20  efine SRT_Fifo  
1f560 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f         5  /* Sto
1f570 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1f580 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1f590 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  tic rowid */.#de
1f5a0 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66  fine SRT_DistFif
1f5b0 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65  o     6  /* Like
1f5c0 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75   SRT_Fifo, but u
1f5d0 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1f5e0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ly */.#define SR
1f5f0 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37  T_Queue        7
1f600 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1f610 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f  t in an queue */
1f620 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1f630 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20  tQueue    8  /* 
1f640 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20  Like SRT_Queue, 
1f650 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1f660 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54  ts only */../* T
1f670 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1f680 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
1f690 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
1f6a0 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
1f6b0 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
1f6c0 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53  ) ((X->eDest)<=S
1f6d0 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23  RT_DistQueue)..#
1f6e0 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
1f6f0 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75  t       9  /* Ou
1f700 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
1f710 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1f720 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
1f730 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20     10  /* Store 
1f740 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
1f750 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
1f760 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
1f770 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20     11  /* Store 
1f780 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
1f790 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
1f7a0 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d  define SRT_Ephem
1f7b0 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72  Tab    12  /* Cr
1f7c0 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74  eate transient t
1f7d0 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b  ab and store lik
1f7e0 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23  e SRT_Table */.#
1f7f0 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75  define SRT_Corou
1f800 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65  tine   13  /* Ge
1f810 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20  nerate a single 
1f820 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1f830 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62  .#define SRT_Tab
1f840 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20  le       14  /* 
1f850 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1f860 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1f870 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1f880 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1f890 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
1f8a0 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72  t describes wher
1f8b0 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20  e to put of the 
1f8c0 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20  results of.** a 
1f8d0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1f8e0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1f8f0 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44  ctDest {.  u8 eD
1f900 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  est;            
1f910 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73  /* How to dispos
1f920 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  e of the results
1f930 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61  .  On of SRT_* a
1f940 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  bove. */.  int i
1f950 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20  SDParm;         
1f960 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
1f970 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
1f980 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
1f990 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
1f9a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61             /* Ba
1f9b0 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
1f9c0 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
1f9d0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
1f9e0 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1f9f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
1fa00 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
1fa10 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66   */.  char *zAff
1fa20 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66  Sdst;      /* Af
1fa30 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
1fa40 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
1fa50 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1fa60 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79  OrderBy;  /* Key
1fa70 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54   columns for SRT
1fa80 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44  _Queue and SRT_D
1fa90 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a  istQueue */.};..
1faa0 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64  /*.** During cod
1fab0 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
1fac0 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
1fad0 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20  do inserts into 
1fae0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a  AUTOINCREMENT.**
1faf0 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
1fb00 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
1fb10 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
1fb20 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
1fb30 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
1fb40 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
1fb50 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
1fb60 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
1fb70 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
1fb80 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
1fb90 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
1fba0 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
1fbb0 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
1fbc0 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
1fbd0 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
1fbe0 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e   inserts are don
1fbf0 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  e within trigger
1fc00 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
1fc10 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
1fc20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
1fc30 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
1fc40 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
1fc50 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
1fc60 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
1fc70 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
1fc80 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
1fc90 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
1fca0 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
1fcb0 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
1fcc0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
1fcd0 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
1fce0 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
1fcf0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1fd00 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
1fd10 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
1fd20 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
1fd30 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1fd40 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
1fd50 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
1fd60 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
1fd70 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
1fd80 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
1fd90 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1fda0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
1fdb0 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
1fdc0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c  /.};../*.** At l
1fdd0 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63  east one instanc
1fde0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1fdf0 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
1fe00 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
1fe10 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74  .** trigger that
1fe20 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68   may be fired wh
1fe30 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49  ile parsing an I
1fe40 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
1fe50 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65   DELETE.** state
1fe60 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f  ment. All such o
1fe70 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65  bjects are store
1fe80 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20  d in the linked 
1fe90 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a  list headed at.*
1fea0 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  * Parse.pTrigger
1feb0 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20  Prg and deleted 
1fec0 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63  once statement c
1fed0 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62  ompilation has b
1fee0 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64  een.** completed
1fef0 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73  ..**.** A Vdbe s
1ff00 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20  ub-program that 
1ff10 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62  implements the b
1ff20 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61  ody and WHEN cla
1ff30 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a  use of trigger.*
1ff40 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72  * TriggerPrg.pTr
1ff50 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20  igger, assuming 
1ff60 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  a default ON CON
1ff70 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a  FLICT clause of.
1ff80 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72  ** TriggerPrg.or
1ff90 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20  conf, is stored 
1ffa0 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72  in the TriggerPr
1ffb0 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61  g.pProgram varia
1ffc0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73  ble..** The Pars
1ffd0 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
1ffe0 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e  st never contain
1fff0 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69  s two entries wi
20000 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76  th the same.** v
20010 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70  alues for both p
20020 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f  Trigger and orco
20030 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72  nf..**.** The Tr
20040 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
20050 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[0] variable is
20060 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f   set to a mask o
20070 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a  f old.* columns.
20080 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20  ** accessed (or 
20090 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69  set to 0 for tri
200a0 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61  ggers fired as a
200b0 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52   result of INSER
200c0 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29  T.** statements)
200d0 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
200e0 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
200f0 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
20100 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
20110 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
20120 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
20130 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
20140 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
20150 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
20160 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
20170 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
20180 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
20190 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
201a0 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
201b0 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
201c0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
201d0 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
201e0 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
201f0 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
20200 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
20210 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
20220 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
20230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
20240 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
20250 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
20260 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
20270 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
20280 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
20290 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
202a0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
202b0 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
202c0 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
202d0 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
202e0 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
202f0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
20300 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
20310 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61  def unsigned cha
20320 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54  r yDbMask[(SQLIT
20330 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39  E_MAX_ATTACHED+9
20340 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44  )/8];.# define D
20350 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
20360 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28    (((M)[(I)/8]&(
20370 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29  1<<((I)&7)))!=0)
20380 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20390 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d  Zero(M)      mem
203a0 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66  set((M),0,sizeof
203b0 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (M)).# define Db
203c0 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
203d0 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c   (M)[(I)/8]|=(1<
203e0 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69  <((I)&7)).# defi
203f0 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
20400 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  (M)   sqlite3DbM
20410 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20  askAllZero(M).# 
20420 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
20430 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74  Zero(M)   (sqlit
20440 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
20450 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74  M)==0).#else.  t
20460 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
20470 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64  int yDbMask;.# d
20480 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
20490 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28  (M,I)    (((M)&(
204a0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
204b0 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
204c0 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
204d0 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69      (M)=0.# defi
204e0 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
204f0 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44  )     (M)|=(((yD
20500 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23  bMask)1)<<(I)).#
20510 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
20520 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d  lZero(M)   (M)==
20530 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
20540 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kNonZero(M)   (M
20550 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )!=0.#endif../*.
20560 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
20570 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
20580 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
20590 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
205a0 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
205b0 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
205c0 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
205d0 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
205e0 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
205f0 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
20600 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
20610 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
20620 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
20630 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
20640 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
20650 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
20660 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
20670 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
20680 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
20690 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
206a0 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
206b0 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
206c0 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
206d0 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
206e0 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
206f0 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
20700 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
20710 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
20720 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
20730 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
20740 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
20750 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
20760 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74  ed-cache.** feat
20770 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ure is enabled (
20780 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d  if sqlite3Tsd()-
20790 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69  >useSharedData i
207a0 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72  s true). They ar
207b0 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  e.** used to sto
207c0 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61  re the set of ta
207d0 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72  ble-locks requir
207e0 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d  ed by the statem
207f0 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d  ent being.** com
20800 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20  piled. Function 
20810 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
20820 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64  () is used to ad
20830 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65  d entries to the
20840 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72  .** list..*/.str
20850 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71  uct Parse {.  sq
20860 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
20870 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64     /* The main d
20880 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72  atabase structur
20890 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  e */.  char *zEr
208a0 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41  rMsg;       /* A
208b0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
208c0 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  */.  Vdbe *pVdbe
208d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
208e0 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75  engine for execu
208f0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79  ting database by
20900 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  tecode */.  int 
20910 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
20920 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20   /* Return code 
20930 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a  from execution *
20940 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53  /.  u8 colNamesS
20950 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45  et;      /* TRUE
20960 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e   after OP_Column
20970 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73  Name has been is
20980 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f  sued to pVdbe */
20990 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d  .  u8 checkSchem
209a0 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65  a;      /* Cause
209b0 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  s schema cookie 
209c0 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65  check after an e
209d0 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73  rror */.  u8 nes
209e0 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ted;           /
209f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
20a00 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20  ed calls to the 
20a10 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65  parser/code gene
20a20 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54  rator */.  u8 nT
20a30 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
20a40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d  /* Number of tem
20a50 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
20a60 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a   in aTempReg[] *
20a70 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72  /.  u8 isMultiWr
20a80 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  ite;     /* True
20a90 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
20aa0 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20  y modify/insert 
20ab0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
20ac0 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20  .  u8 mayAbort; 
20ad0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
20ae0 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
20af0 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
20b00 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75  exception */.  u
20b10 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20  8 hasCompound;  
20b20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69      /* Need to i
20b30 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d  nvoke convertCom
20b40 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
20b50 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20  query() */.  u8 
20b60 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20  okConstFactor;  
20b70 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f    /* OK to facto
20b80 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  r out constants 
20b90 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c  */.  u8 disableL
20ba0 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d  ookaside; /* Num
20bb0 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f  ber of times loo
20bc0 6b 61 73 69 64 65 20 68 61 73 20 62 65 65 6e 20  kaside has been 
20bd0 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38  disabled */.  u8
20be0 20 64 69 73 61 62 6c 65 56 74 61 62 3b 20 20 20   disableVtab;   
20bf0 20 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 61 6c     /* Disable al
20c00 6c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  l virtual tables
20c10 20 66 6f 72 20 74 68 69 73 20 70 61 72 73 65 20   for this parse 
20c20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
20c30 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
20c40 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
20c50 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
20c60 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
20c70 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
20c80 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
20c90 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
20ca0 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
20cb0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
20cc0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20cd0 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
20ce0 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
20cf0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20d00 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
20d10 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
20d20 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
20d30 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
20d40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
20d50 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
20d60 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 73  o far */.  int s
20d70 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  zOpAlloc;       
20d80 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f  /* Bytes of memo
20d90 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  ry space allocat
20da0 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
20db0 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66  ] */.  int iSelf
20dc0 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  Tab;        /* T
20dd0 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  able associated 
20de0 77 69 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e  with an index on
20df0 20 65 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69   expr, or negati
20e00 76 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ve.             
20e10 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20            ** of 
20e20 74 68 65 20 62 61 73 65 20 72 65 67 69 73 74 65  the base registe
20e30 72 20 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63  r during check-c
20e40 6f 6e 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a  onstraint eval *
20e50 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
20e60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
20e70 2a 6e 65 67 61 74 69 76 65 2a 20 6f 66 20 74 68  *negative* of th
20e80 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65  e number of labe
20e90 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74  ls used */.  int
20ea0 20 6e 4c 61 62 65 6c 41 6c 6c 6f 63 3b 20 20 20   nLabelAlloc;   
20eb0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
20ec0 6c 6f 74 73 20 69 6e 20 61 4c 61 62 65 6c 20 2a  lots in aLabel *
20ed0 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
20ee0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
20ef0 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
20f00 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  bels */.  ExprLi
20f10 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
20f20 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
20f30 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
20f40 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
20f50 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
20f60 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
20f70 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
20f80 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
20f90 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
20fa0 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
20fb0 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
20fc0 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
20fd0 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
20fe0 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
20ff0 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
21000 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
21010 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
21020 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
21030 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
21040 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
21050 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
21060 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
21070 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
21080 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
21090 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
210a0 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
210b0 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
210c0 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
210d0 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
210e0 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
210f0 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  ram */.  int nSe
21100 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  lect;         /*
21110 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43   Number of SELEC
21120 54 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72  T stmts. Counter
21130 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 49   for Select.selI
21140 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
21150 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
21160 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
21170 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
21180 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
21190 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
211a0 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
211b0 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
211c0 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
211d0 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
211e0 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
211f0 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
21200 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
21210 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
21220 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
21230 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73  unters */.  Pars
21240 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
21250 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
21260 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
21270 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
21280 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
21290 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
212a0 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
212b0 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
212c0 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
212d0 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
212e0 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
212f0 42 74 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Btree opcode on 
21300 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
21310 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70    u32 nQueryLoop
21320 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75  ;      /* Est nu
21330 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
21340 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31  ns of a query (1
21350 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20  0*log2(N)) */.  
21360 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
21370 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
21380 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
21390 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
213a0 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
213b0 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
213c0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
213d0 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
213e0 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
213f0 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
21400 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
21410 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
21420 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
21430 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
21440 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
21450 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
21460 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
21470 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
21480 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
21490 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a  ggers */..  /***
214a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
214b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
214c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
214d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
214e0 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65  *******.  ** Fie
214f0 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62  lds above must b
21500 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
21510 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c   zero.  The fiel
21520 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a  ds that follow,.
21530 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65    ** down to the
21540 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
21550 65 20 72 65 63 75 72 73 69 76 65 20 73 65 63 74  e recursive sect
21560 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64  ion, do not need
21570 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74   to be.  ** init
21580 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20  ialized as they 
21590 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f  will be set befo
215a0 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  re being used.  
215b0 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a  The boundary is.
215c0 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20    ** determined 
215d0 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  by offsetof(Pars
215e0 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a 20 20 2a  e,aTempReg)..  *
215f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21600 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21610 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21630 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e  *********/..  in
21640 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
21650 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67        /* Holding
21660 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72   area for tempor
21670 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f  ary registers */
21680 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
21690 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f  ken;       /* To
216a0 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
216b0 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
216c0 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a  ct name */..  /*
216d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21710 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
21720 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
21730 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
21740 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
21750 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
21760 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
21770 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
21780 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
21790 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
217a0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
217b0 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
217c0 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f  of(Parse,sLastTo
217d0 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73  ken) so the sLas
217e0 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73  tToken field mus
217f0 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69  t be the.  ** fi
21800 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65  rst field in the
21810 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
21820 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
21830 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
21870 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b    Token sLastTok
21880 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  en;       /* The
21890 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
218a0 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56  ed */.  ynVar nV
218b0 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
218c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
218d0 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
218e0 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
218f0 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  far */.  u8 iPkS
21900 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
21910 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
21920 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
21930 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
21940 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
21950 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
21960 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
21970 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
21980 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
21990 66 20 21 28 64 65 66 69 6e 65 64 28 53 51 4c 49  f !(defined(SQLI
219a0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
219b0 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64  ABLE) && defined
219c0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  (SQLITE_OMIT_ALT
219d0 45 52 54 41 42 4c 45 29 29 0a 20 20 75 38 20 65  ERTABLE)).  u8 e
219e0 50 61 72 73 65 4d 6f 64 65 3b 20 20 20 20 20 20  ParseMode;      
219f0 20 20 20 20 20 20 2f 2a 20 50 41 52 53 45 5f 4d        /* PARSE_M
21a00 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74  ODE_XXX constant
21a10 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
21a20 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
21a30 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
21a40 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
21a50 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21a60 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
21a70 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
21a80 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69  endif.  int nHei
21a90 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
21aa0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
21ab0 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
21ac0 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
21ad0 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
21ae0 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
21af0 0a 20 20 69 6e 74 20 61 64 64 72 45 78 70 6c 61  .  int addrExpla
21b00 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  in;          /* 
21b10 41 64 64 72 65 73 73 20 6f 66 20 63 75 72 72 65  Address of curre
21b20 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70  nt OP_Explain op
21b30 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
21b40 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20   VList *pVList; 
21b50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
21b60 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61  pping between va
21b70 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64  riable names and
21b80 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64   numbers */.  Vd
21b90 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
21ba0 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
21bb0 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
21bc0 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
21bd0 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ()) */.  const c
21be0 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
21bf0 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
21c00 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
21c10 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
21c20 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
21c30 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
21c40 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
21c50 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
21c60 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
21c70 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 77 49 6e  .  Index *pNewIn
21c80 64 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dex;         /* 
21c90 41 6e 20 69 6e 64 65 78 20 62 65 69 6e 67 20 63  An index being c
21ca0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
21cb0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
21cc0 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69  Trigger *pNewTri
21cd0 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69  gger;     /* Tri
21ce0 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74  gger under const
21cf0 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45  ruct by a CREATE
21d00 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f   TRIGGER */.  co
21d10 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
21d20 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
21d30 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
21d40 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
21d50 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  cks */.#ifndef S
21d60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21d70 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
21d80 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
21d90 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
21da0 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
21db0 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
21dc0 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
21dd0 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
21de0 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
21df0 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
21e00 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
21e10 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
21e20 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
21e30 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
21e40 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
21e50 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
21e60 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
21e70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
21e80 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
21e90 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
21ea0 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
21eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21ec0 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
21ed0 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
21ee0 20 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46    With *pWithToF
21ef0 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46  ree;        /* F
21f00 72 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62  ree this WITH ob
21f10 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20  ject at the end 
21f20 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a  of the parse */.
21f30 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21f40 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
21f50 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52   RenameToken *pR
21f60 65 6e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f  ename;     /* To
21f70 6b 65 6e 73 20 73 75 62 6a 65 63 74 20 74 6f 20  kens subject to 
21f80 72 65 6e 61 6d 69 6e 67 20 62 79 20 41 4c 54 45  renaming by ALTE
21f90 52 20 54 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69  R TABLE */.#endi
21fa0 66 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41  f.};..#define PA
21fb0 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20  RSE_MODE_NORMAL 
21fc0 20 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65         0.#define
21fd0 20 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c   PARSE_MODE_DECL
21fe0 41 52 45 5f 56 54 41 42 20 20 31 0a 23 64 65 66  ARE_VTAB  1.#def
21ff0 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52  ine PARSE_MODE_R
22000 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 23  ENAME_COLUMN 2.#
22010 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
22020 45 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45 20 20  E_RENAME_TABLE  
22030 33 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61  3../*.** Sizes a
22040 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76  nd pointers of v
22050 61 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20  arious parts of 
22060 74 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74  the Parse object
22070 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  ..*/.#define PAR
22080 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74  SE_HDR_SZ offset
22090 6f 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65  of(Parse,aTempRe
220a0 67 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20  g) /* Recursive 
220b0 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63  part w/o aColCac
220c0 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  he*/.#define PAR
220d0 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66  SE_RECURSE_SZ of
220e0 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
220f0 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52  stToken)    /* R
22100 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
22110 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
22120 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50  AIL_SZ (sizeof(P
22130 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55  arse)-PARSE_RECU
22140 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72  RSE_SZ) /* Non-r
22150 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
22160 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
22170 41 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29  AIL(X) (((char*)
22180 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52  (X))+PARSE_RECUR
22190 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74  SE_SZ)  /* Point
221a0 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f  er to tail */../
221b0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
221c0 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
221d0 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  side an sqlite3_
221e0 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63  declare_vtab() c
221f0 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  all..*/.#ifdef S
22200 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
22210 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
22220 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
22230 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
22240 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
22250 54 41 42 20 28 70 50 61 72 73 65 2d 3e 65 50 61  TAB (pParse->ePa
22260 72 73 65 4d 6f 64 65 3d 3d 50 41 52 53 45 5f 4d  rseMode==PARSE_M
22270 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42  ODE_DECLARE_VTAB
22280 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ).#endif..#if de
22290 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
222a0 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20  T_ALTERTABLE).  
222b0 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d  #define IN_RENAM
222c0 45 5f 4f 42 4a 45 43 54 20 30 0a 23 65 6c 73 65  E_OBJECT 0.#else
222d0 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45  .  #define IN_RE
222e0 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 28 70 50 61  NAME_OBJECT (pPa
222f0 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3e  rse->eParseMode>
22300 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41  =PARSE_MODE_RENA
22310 4d 45 5f 43 4f 4c 55 4d 4e 29 0a 23 65 6e 64 69  ME_COLUMN).#endi
22320 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
22330 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
22340 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69  ALTABLE) && defi
22350 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22360 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23 64  ALTERTABLE).  #d
22370 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c  efine IN_SPECIAL
22380 5f 50 41 52 53 45 20 30 0a 23 65 6c 73 65 0a 20  _PARSE 0.#else. 
22390 20 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43   #define IN_SPEC
223a0 49 41 4c 5f 50 41 52 53 45 20 28 70 50 61 72 73  IAL_PARSE (pPars
223b0 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 21 3d 50  e->eParseMode!=P
223c0 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c  ARSE_MODE_NORMAL
223d0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
223e0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
223f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
22400 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65  ucture can be de
22410 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63  clared on a stac
22420 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  k and used.** to
22430 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e   save the Parse.
22440 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c  zAuthContext val
22450 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ue so that it ca
22460 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61  n be restored la
22470 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ter..*/.struct A
22480 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63  uthContext {.  c
22490 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
224a0 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75  Context;   /* Pu
224b0 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41  t saved Parse.zA
224c0 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20  uthContext here 
224d0 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
224e0 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
224f0 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74   /* The Parse st
22500 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f  ructure */.};../
22510 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c  *.** Bitfield fl
22520 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65  ags for P5 value
22530 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f   in various opco
22540 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  des..**.** Value
22550 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
22560 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
22570 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c  t()):.**    OPFL
22580 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
22590 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  == SQLITE_FUNC_L
225a0 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c  ENGTH.**    OPFL
225b0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
225c0 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  == SQLITE_FUNC_T
225d0 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c  YPEOF.**    OPFL
225e0 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
225f0 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  == BTREE_BULKLOA
22600 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  D.**    OPFLAG_S
22610 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42  EEKEQ       == B
22620 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20  TREE_SEEK_EQ.** 
22630 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c     OPFLAG_FORDEL
22640 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
22650 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20  FORDELETE.**    
22660 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
22670 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56  ION == BTREE_SAV
22680 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20  EPOSITION.**    
22690 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
226a0 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58      == BTREE_AUX
226b0 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e  DELETE.*/.#defin
226c0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
226d0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
226e0 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74  * OP_Insert: Set
226f0 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
22700 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20  Change */.      
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22730 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50  * Also used in P
22740 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50  2 (not P5) of OP
22750 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69  _Delete */.#defi
22760 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47  ne OPFLAG_NOCHNG
22770 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
22780 2f 2a 20 4f 50 5f 56 43 6f 6c 75 6d 6e 20 6e 6f  /* OP_VColumn no
22790 63 68 61 6e 67 65 20 66 6f 72 20 55 50 44 41 54  change for UPDAT
227a0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
227b0 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20  LAG_EPHEM       
227c0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
227d0 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61  Column: Ephemera
227e0 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a  l output is ok *
227f0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22800 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
22810 78 32 30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x20    /* Set to
22820 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
22830 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
22840 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
22850 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
22860 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
22870 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
22880 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22890 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
228a0 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
228b0 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
228c0 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
228d0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
228e0 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
228f0 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
22900 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
22910 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
22920 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e  efine OPFLAG_ISN
22930 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34 30 20  OOP        0x40 
22940 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20     /* OP_Delete 
22950 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d  does pre-update-
22960 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  hook only */.#de
22970 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  fine OPFLAG_LENG
22980 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20  THARG     0x40  
22990 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
229a0 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e  nly used for len
229b0 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  gth() */.#define
229c0 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
229d0 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a  G     0x80    /*
229e0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
229f0 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  used for typeof(
22a00 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
22a10 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20  LAG_BULKCSR     
22a20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
22a30 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f  Open** used to o
22a40 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20  pen bulk cursor 
22a50 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22a60 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20  G_SEEKEQ        
22a70 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x02    /* OP_Op
22a80 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73  en** cursor uses
22a90 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f   EQ seek only */
22aa0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22ab0 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30 78  FORDELETE     0x
22ac0 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  08    /* OP_Open
22ad0 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45   should use BTRE
22ae0 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23  E_FORDELETE */.#
22af0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32  define OPFLAG_P2
22b00 49 53 52 45 47 20 20 20 20 20 20 20 30 78 31 30  ISREG       0x10
22b10 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f      /* P2 to OP_
22b20 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69  Open** is a regi
22b30 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23  ster number */.#
22b40 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45  define OPFLAG_PE
22b50 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31  RMUTE       0x01
22b60 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72      /* OP_Compar
22b70 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75  e: use the permu
22b80 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  tation */.#defin
22b90 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  e OPFLAG_SAVEPOS
22ba0 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f  ITION  0x02    /
22bb0 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65  * OP_Delete/Inse
22bc0 72 74 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20  rt: save cursor 
22bd0 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  pos */.#define O
22be0 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20  PFLAG_AUXDELETE 
22bf0 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f      0x04    /* O
22c00 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20  P_Delete: index 
22c10 69 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a  in a DELETE op *
22c20 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22c30 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 20 30  _NOCHNG_MAGIC  0
22c40 78 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b  x6d    /* OP_Mak
22c50 65 52 65 63 6f 72 64 3a 20 73 65 72 69 61 6c 74  eRecord: serialt
22c60 79 70 65 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a  ype 10 is ok */.
22c70 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
22c80 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
22c90 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
22ca0 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
22cb0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
22cc0 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
22cd0 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73  .. *. * Pointers
22ce0 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66   to instances of
22cf0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
22d00 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77  are stored in tw
22d10 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e  o ways.. * 1. In
22d20 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20   the "trigHash" 
22d30 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74  hash table (part
22d40 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a   of the sqlite3*
22d50 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73   that represents
22d60 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62   the. *    datab
22d70 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
22d80 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
22d90 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
22da0 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
22db0 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
22dc0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
22dd0 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
22de0 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
22df0 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
22e00 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
22e10 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
22e20 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
22e30 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
22e40 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
22e50 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
22e60 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
22e70 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
22e80 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
22e90 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
22ea0 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
22eb0 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
22ec0 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
22ed0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
22ee0 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
22ef0 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
22f00 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
22f10 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
22f20 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
22f30 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
22f40 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
22f50 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
22f60 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
22f70 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f90 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
22fa0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
22fb0 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
22fc0 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
22fd0 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
22fe0 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
22ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23000 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
23010 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
23020 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
23030 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
23040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23050 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
23060 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
23070 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
23080 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
23090 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
230a0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
230b0 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
230c0 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
230d0 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
230e0 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
230f0 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
23100 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
23110 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
23120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23130 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
23140 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
23150 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
23160 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
23170 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
23180 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
23190 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
231a0 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
231b0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
231c0 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
231d0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
231e0 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
231f0 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
23200 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
23210 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
23220 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
23230 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
23240 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
23250 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
23260 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
23270 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
23280 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
23290 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
232a0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
232b0 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
232c0 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a  termine which..*
232d0 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
232e0 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
232f0 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
23300 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
23310 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
23320 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
23330 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
23340 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
23350 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
23360 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
23370 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
23380 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
23390 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
233a0 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
233b0 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
233c0 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
233d0 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
233e0 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
233f0 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
23400 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20  -program.. *. * 
23410 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
23420 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
23430 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
23440 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
23450 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
23460 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
23470 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
23480 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
23490 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
234a0 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65  the. * associate
234b0 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  d struct Trigger
234c0 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66   instance. The f
234d0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
234e0 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
234f0 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20  is. * the first 
23500 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67  step of the trig
23510 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a  ger-program.. *.
23520 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62   * The "op" memb
23530 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65  er indicates whe
23540 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22  ther this is a "
23550 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54  DELETE", "INSERT
23560 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20  ", "UPDATE" or. 
23570 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65  * "SELECT" state
23580 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e  ment. The meanin
23590 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20  gs of the other 
235a0 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72  members is deter
235b0 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20  mined by the. * 
235c0 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73  value of "op" as
235d0 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20   follows:. *. * 
235e0 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54  (op == TK_INSERT
235f0 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d  ). * orconf    -
23600 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20  > stores the ON 
23610 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
23620 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20  hm. * pSelect   
23630 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
23640 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
23650 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74   SELECT ... stat
23660 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
23670 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
23680 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65   stores a pointe
23690 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20  r to the SELECT 
236a0 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72  statement. Other
236b0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54  wise NULL.. * zT
236c0 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
236d0 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
236e0 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20  table to insert 
236f0 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69  into.. * pExprLi
23700 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73  st -> If this is
23710 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
23720 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73  ... VALUES ... s
23730 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
23740 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
23750 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65  his stores value
23760 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
23770 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
23780 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d  .. * pIdList   -
23790 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
237a0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
237b0 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29  (<column-names>)
237c0 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20   VALUES .... *  
237d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
237e0 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73  ement, then this
237f0 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75   stores the colu
23800 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20  mn-names to be. 
23810 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  *              i
23820 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a  nserted into.. *
23830 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45  . * (op == TK_DE
23840 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  LETE). * zTarget
23850 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
23860 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
23870 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
23880 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
23890 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
238a0 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
238b0 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
238c0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
238d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
238e0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
238f0 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55  *. * (op == TK_U
23900 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65  PDATE). * zTarge
23910 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
23920 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
23930 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20  e to update.. * 
23940 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
23950 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
23960 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
23970 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
23980 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
23990 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
239a0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45  wise NULL.. * pE
239b0 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73  xprList -> A lis
239c0 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  t of the columns
239d0 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74   to update and t
239e0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  he expressions t
239f0 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20  o update. *     
23a00 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f           them to
23a10 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64  . See sqlite3Upd
23a20 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74  ate() documentat
23a30 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73  ion of "pChanges
23a40 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  ". *            
23a50 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20    argument.. *. 
23a60 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
23a70 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b  rStep {.  u8 op;
23a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23a90 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
23aa0 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
23ab0 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c  K_INSERT, TK_SEL
23ac0 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f  ECT */.  u8 orco
23ad0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nf;           /*
23ae0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63   OE_Rollback etc
23af0 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  . */.  Trigger *
23b00 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54  pTrig;      /* T
23b10 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20  he trigger that 
23b20 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70  this step is a p
23b30 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65  art of */.  Sele
23b40 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
23b50 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
23b60 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49  ment or RHS of I
23b70 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43  NSERT INTO SELEC
23b80 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20  T ... */.  char 
23b90 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20  *zTarget;       
23ba0 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20  /* Target table 
23bb0 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
23bc0 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  TE, INSERT */.  
23bd0 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
23be0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
23bf0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c  E clause for DEL
23c00 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
23c10 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
23c20 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
23c30 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20   SET clause for 
23c40 55 50 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69  UPDATE */.  IdLi
23c50 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20  st *pIdList;    
23c60 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73   /* Column names
23c70 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20   for INSERT */. 
23c80 20 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74   Upsert *pUpsert
23c90 3b 20 20 20 20 20 2f 2a 20 55 70 73 65 72 74 20  ;     /* Upsert 
23ca0 63 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e  clauses on an IN
23cb0 53 45 52 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a  SERT */.  char *
23cc0 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 2f  zSpan;         /
23cd0 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74  * Original SQL t
23ce0 65 78 74 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d  ext of this comm
23cf0 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  and */.  Trigger
23d00 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  Step *pNext;  /*
23d10 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e   Next in the lin
23d20 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67  k-list */.  Trig
23d30 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20  gerStep *pLast; 
23d40 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74   /* Last element
23d50 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56   in link-list. V
23d60 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65  alid for 1st ele
23d70 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  m only */.};../*
23d80 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
23d90 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
23da0 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
23db0 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c   used by the sql
23dc0 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75  iteFix....** rou
23dd0 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61  tines as they wa
23de0 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65  lk the parse tre
23df0 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61  e to make databa
23e00 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a  se references.**
23e10 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79   explicit..*/.ty
23e20 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46  pedef struct DbF
23e30 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74  ixer DbFixer;.st
23e40 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20  ruct DbFixer {. 
23e50 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
23e60 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
23e70 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72  ing context.  Er
23e80 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69  ror messages wri
23e90 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53  tten here */.  S
23ea0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
23eb0 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20     /* Fix items 
23ec0 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  to this schema *
23ed0 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79  /.  int bVarOnly
23ee0 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b  ;       /* Check
23ef0 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65   for variable re
23f00 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f  ferences only */
23f10 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
23f20 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  Db;    /* Make s
23f30 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20  ure all objects 
23f40 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  are contained in
23f50 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
23f60 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
23f70 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20  zType;  /* Type 
23f80 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
23f90 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
23fa0 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20  r messages */.  
23fb0 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61  const Token *pNa
23fc0 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  me; /* Name of t
23fd0 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
23fe0 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
23ff0 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ssages */.};../*
24000 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20  .** An objected 
24010 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61  used to accumula
24020 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  te the text of a
24030 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65   string where we
24040 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73  .** do not neces
24050 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20  sarily know how 
24060 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77  big the string w
24070 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e  ill be in the en
24080 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c  d..*/.struct sql
24090 69 74 65 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c  ite3_str {.  sql
240a0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
240b0 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61    /* Optional da
240c0 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61  tabase for looka
240d0 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55  side.  Can be NU
240e0 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  LL */.  char *zT
240f0 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
24100 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
24110 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
24120 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20   u32  nAlloc;   
24130 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20        /* Amount 
24140 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  of space allocat
24150 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20  ed in zText */. 
24160 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20   u32  mxAlloc;  
24170 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
24180 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74   allowed allocat
24190 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d  ion.  0 for no m
241a0 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20  alloc usage */. 
241b0 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20   u32  nChar;    
241c0 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
241d0 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
241e0 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61   far */.  u8   a
241f0 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f  ccError;       /
24200 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f  * SQLITE_NOMEM o
24210 72 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20  r SQLITE_TOOBIG 
24220 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66  */.  u8   printf
24230 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c  Flags;    /* SQL
24240 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73  ITE_PRINTF flags
24250 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65   below */.};.#de
24260 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
24270 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31  TF_INTERNAL 0x01
24280 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73    /* Internal-us
24290 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72  e-only converter
242a0 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65  s allowed */.#de
242b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
242c0 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32  TF_SQLFUNC  0x02
242d0 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f    /* SQL functio
242e0 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56  n arguments to V
242f0 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69  XPrintf */.#defi
24300 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
24310 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20  _MALLOCED 0x04  
24320 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65 78 74  /* True if xText
24330 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70   is allocated sp
24340 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ace */..#define 
24350 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28  isMalloced(X)  (
24360 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67  ((X)->printfFlag
24370 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  s & SQLITE_PRINT
24380 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a  F_MALLOCED)!=0).
24390 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65  ../*.** A pointe
243a0 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
243b0 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63  ure is used to c
243c0 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72  ommunicate infor
243d0 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73  mation.** from s
243e0 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f  qlite3Init and O
243f0 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e  P_ParseSchema in
24400 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
24410 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
24420 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
24430 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
24440 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
24450 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
24460 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
24470 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
24480 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
24490 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
244a0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
244b0 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20         /* 0 for 
244c0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
244d0 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20  1 for TEMP, 2.. 
244e0 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a  for ATTACHed */.
244f0 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
24500 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
24510 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65  code stored here
24520 20 2a 2f 0a 20 20 75 33 32 20 6d 49 6e 69 74 46   */.  u32 mInitF
24530 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
24540 67 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 65  gs controlling e
24550 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
24560 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
24570 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
24580 65 73 20 66 6f 72 20 6d 49 6e 69 74 46 6c 61 67  es for mInitFlag
24590 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 49  s.*/.#define INI
245a0 54 46 4c 41 47 5f 41 6c 74 65 72 54 61 62 6c 65  TFLAG_AlterTable
245b0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68     0x0001  /* Th
245c0 69 73 20 69 73 20 61 20 72 65 70 61 72 73 65 20  is is a reparse 
245d0 61 66 74 65 72 20 41 4c 54 45 52 20 54 41 42 4c  after ALTER TABL
245e0 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75  E */../*.** Stru
245f0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67  cture containing
24600 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72   global configur
24610 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74  ation data for t
24620 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
24630 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  y..**.** This st
24640 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e  ructure also con
24650 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65  tains some state
24660 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
24670 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  .struct Sqlite3C
24680 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d  onfig {.  int bM
24690 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20  emstat;         
246a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
246b0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65  rue to enable me
246c0 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20  mory status */. 
246d0 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b   int bCoreMutex;
246e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246f0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
24700 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69  able core mutexi
24710 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c  ng */.  int bFul
24720 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  lMutex;         
24730 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24740 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c  e to enable full
24750 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
24760 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20  nt bOpenUri;    
24770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24780 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65   /* True to inte
24790 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20  rpret filenames 
247a0 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74  as URIs */.  int
247b0 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20   bUseCis;       
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
247d0 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69  * Use covering i
247e0 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d  ndices for full-
247f0 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 62  scans */.  int b
24800 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20  SmallMalloc;    
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24820 41 76 6f 69 64 20 6c 61 72 67 65 20 6d 65 6d 6f  Avoid large memo
24830 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69  ry allocations i
24840 66 20 74 72 75 65 20 2a 2f 0a 20 20 69 6e 74 20  f true */.  int 
24850 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20  mxStrlen;       
24860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24870 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20   Maximum string 
24880 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20  length */.  int 
24890 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20  neverCorrupt;   
248a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
248b0 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c 77   Database is alw
248c0 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  ays well-formed 
248d0 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61  */.  int szLooka
248e0 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
248f0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
24900 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
24910 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74  er size */.  int
24920 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20   nLookaside;    
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24940 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
24950 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74  ide buffer count
24960 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53   */.  int nStmtS
24970 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  pill;           
24980 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d          /* Stmt-
24990 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f  journal spill-to
249a0 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c 64 20  -disk threshold 
249b0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  */.  sqlite3_mem
249c0 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20  _methods m;     
249d0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65         /* Low-le
249e0 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  vel memory alloc
249f0 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20  ation interface 
24a00 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
24a10 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78  ex_methods mutex
24a20 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65  ;      /* Low-le
24a30 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66  vel mutex interf
24a40 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
24a50 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32  _pcache_methods2
24a60 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f   pcache2;  /* Lo
24a70 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63  w-level page-cac
24a80 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  he interface */.
24a90 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20    void *pHeap;  
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ab0 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72      /* Heap stor
24ac0 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  age space */.  i
24ad0 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20  nt nHeap;       
24ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24af0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61   /* Size of pHea
24b00 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  p[] */.  int mnR
24b10 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20  eq, mxReq;      
24b20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
24b30 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72  n and max heap r
24b40 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f  equests sizes */
24b50 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
24b60 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
24b70 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73       /* mmap() s
24b80 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69  pace per open fi
24b90 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  le */.  sqlite3_
24ba0 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20  int64 mxMmap;   
24bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
24bc0 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73  imum value for s
24bd0 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20  zMmap */.  void 
24be0 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  *pPage;         
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24c00 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  Page cache memor
24c10 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67  y */.  int szPag
24c20 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
24c30 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
24c40 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e   of each page in
24c50 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
24c60 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20  t nPage;        
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c80 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
24c90 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  es in pPage[] */
24ca0 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53  .  int mxParserS
24cb0 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  tack;           
24cc0 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20       /* maximum 
24cd0 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72  depth of the par
24ce0 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69  ser stack */.  i
24cf0 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e  nt sharedCacheEn
24d00 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
24d10 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72   /* true if shar
24d20 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e  ed-cache mode en
24d30 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73  abled */.  u32 s
24d40 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20  zPma;           
24d50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24d60 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50  Maximum Sorter P
24d70 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20  MA size */.  /* 
24d80 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
24d90 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
24da0 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
24db0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
24dc0 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
24dd0 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
24de0 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
24df0 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
24e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e10 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
24e20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
24e30 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
24e40 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
24e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e60 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
24e70 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
24e80 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
24e90 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
24ea0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24eb0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
24ec0 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
24ed0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
24ee0 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f00 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
24f10 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
24f20 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
24f30 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
24f40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
24f50 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
24f60 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
24f70 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74  /.  int nRefInit
24f80 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
24f90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
24fa0 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69  of users of pIni
24fb0 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69  tMutex */.  sqli
24fc0 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
24fd0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
24fe0 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
24ff0 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
25000 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
25010 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
25020 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
25030 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
25040 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
25050 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25070 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
25080 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23  t to xLog() */.#
25090 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
250a0 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69  BLE_SQLLOG.  voi
250b0 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64  d(*xSqllog)(void
250c0 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
250d0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
250e0 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67  void *pSqllogArg
250f0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
25100 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
25110 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f  RAGE.  /* The fo
25120 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b  llowing callback
25130 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69   (if not NULL) i
25140 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65  s invoked on eve
25150 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20  ry VDBE branch. 
25160 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20   ** operation.  
25170 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  Set the callback
25180 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45   using SQLITE_TE
25190 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45  STCTRL_VDBE_COVE
251a0 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69  RAGE..  */.  voi
251b0 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29  d (*xVdbeBranch)
251c0 28 76 6f 69 64 2a 2c 75 6e 73 69 67 6e 65 64 20  (void*,unsigned 
251d0 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
251e0 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
251f0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
25200 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
25210 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
25220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25230 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
25240 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
25250 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25260 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e 74  UNTESTABLE.  int
25270 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b   (*xTestCallback
25280 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f  )(int);        /
25290 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c  * Invoked by sql
252a0 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a  ite3FaultSim() *
252b0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62  /.#endif.  int b
252c0 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20  LocaltimeFault; 
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
252e0 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63  True to fail loc
252f0 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a  altime() calls *
25300 2f 0a 20 20 69 6e 74 20 62 49 6e 74 65 72 6e 61  /.  int bInterna
25310 6c 46 75 6e 63 74 69 6f 6e 73 3b 20 20 20 20 20  lFunctions;     
25320 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 72 6e 61        /* Interna
25330 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20  l SQL functions 
25340 61 72 65 20 76 69 73 69 62 6c 65 20 2a 2f 0a 20  are visible */. 
25350 20 69 6e 74 20 69 4f 6e 63 65 52 65 73 65 74 54   int iOnceResetT
25360 68 72 65 73 68 6f 6c 64 3b 20 20 20 20 20 20 20  hreshold;       
25370 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65     /* When to re
25380 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e  set OP_Once coun
25390 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 7a  ters */.  u32 sz
253a0 53 6f 72 74 65 72 52 65 66 3b 20 20 20 20 20 20  SorterRef;      
253b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
253c0 69 6e 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  in size in bytes
253d0 20 74 6f 20 75 73 65 20 73 6f 72 74 65 72 2d 72   to use sorter-r
253e0 65 66 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  efs */.};../*.**
253f0 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
25400 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73  sed inside of as
25410 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
25420 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68  s to indicate th
25430 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74  at.** the assert
25440 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f   is only valid o
25450 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
25460 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65  database.  Inste
25470 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ad of:.**.**    
25480 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a   assert( X );.**
25490 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a  .** One writes:.
254a0 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
254b0 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44  ( X || CORRUPT_D
254c0 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55  B );.**.** CORRU
254d0 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75  PT_DB is true du
254e0 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72  ring normal oper
254f0 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f  ation.  CORRUPT_
25500 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69  DB does not indi
25510 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65  cate.** that the
25520 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66   database is def
25530 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c  initely corrupt,
25540 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69   only that it mi
25550 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a  ght be corrupt..
25560 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74  ** For most test
25570 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f   cases, CORRUPT_
25580 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c  DB is set to fal
25590 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69  se using a speci
255a0 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  al.** sqlite3_te
255b0 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54  st_control().  T
255c0 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65  his enables asse
255d0 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
255e0 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e  to prove.** thin
255f0 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61  gs that are alwa
25600 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c  ys true for well
25610 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
25620 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s..*/.#define CO
25630 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74  RRUPT_DB  (sqlit
25640 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f  e3Config.neverCo
25650 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  rrupt==0)../*.**
25660 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72   Context pointer
25670 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72   passed down thr
25680 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61  ough the tree-wa
25690 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61  lk..*/.struct Wa
256a0 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  lker {.  Parse *
256b0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
256c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256d0 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e     /* Parser con
256e0 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20  text.  */.  int 
256f0 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29  (*xExprCallback)
25700 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
25710 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  ;     /* Callbac
25720 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  k for expression
25730 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65  s */.  int (*xSe
25740 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61  lectCallback)(Wa
25750 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20  lker*,Select*); 
25760 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
25770 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f   SELECTs */.  vo
25780 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  id (*xSelectCall
25790 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53  back2)(Walker*,S
257a0 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e  elect*);/* Secon
257b0 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  d callback for S
257c0 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20  ELECTs */.  int 
257d0 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20  walkerDepth;    
257e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
25800 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f  of subqueries */
25810 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20  .  u8 eCode;    
25820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25830 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25840 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69  A small processi
25850 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  ng code */.  uni
25860 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  on {            
25870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25880 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
25890 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63  data for callbac
258a0 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e  k */.    NameCon
258b0 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20  text *pNC;      
258c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258d0 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e     /* Naming con
258e0 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  text */.    int 
258f0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
25900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25910 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74        /* A count
25920 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
25930 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
25940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25950 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20      /* A cursor 
25960 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72  number */.    Sr
25970 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
25980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25990 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20          /* FROM 
259a0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74  clause */.    st
259b0 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70  ruct SrcCount *p
259c0 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20  SrcCount;       
259d0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
259e0 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ing column refer
259f0 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72  ences */.    str
25a00 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43  uct CCurHint *pC
25a10 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20  CurHint;        
25a20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62         /* Used b
25a30 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74  y codeCursorHint
25a40 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61  () */.    int *a
25a50 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  iCol;           
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a70 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20      /* array of 
25a80 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a  column indexes *
25a90 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78  /.    struct Idx
25aa0 43 6f 76 65 72 20 2a 70 49 64 78 43 6f 76 65 72  Cover *pIdxCover
25ab0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25ac0 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 69 6e 64  /* Check for ind
25ad0 65 78 20 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20  ex coverage */. 
25ae0 20 20 20 73 74 72 75 63 74 20 49 64 78 45 78 70     struct IdxExp
25af0 72 54 72 61 6e 73 20 2a 70 49 64 78 54 72 61 6e  rTrans *pIdxTran
25b00 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
25b10 43 6f 6e 76 65 72 74 20 69 64 78 65 64 20 65 78  Convert idxed ex
25b20 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  pr to column */.
25b30 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47      ExprList *pG
25b40 72 6f 75 70 42 79 3b 20 20 20 20 20 20 20 20 20  roupBy;         
25b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25b60 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
25b70 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
25b80 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
25b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ba0 20 20 2f 2a 20 48 41 56 49 4e 47 20 74 6f 20 57    /* HAVING to W
25bb0 48 45 52 45 20 63 6c 61 75 73 65 20 63 74 78 20  HERE clause ctx 
25bc0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57 69  */.    struct Wi
25bd0 6e 64 6f 77 52 65 77 72 69 74 65 20 2a 70 52 65  ndowRewrite *pRe
25be0 77 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20  write;          
25bf0 20 2f 2a 20 57 69 6e 64 6f 77 20 72 65 77 72 69   /* Window rewri
25c00 74 65 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  te context */.  
25c10 20 20 73 74 72 75 63 74 20 57 68 65 72 65 43 6f    struct WhereCo
25c20 6e 73 74 20 2a 70 43 6f 6e 73 74 3b 20 20 20 20  nst *pConst;    
25c30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
25c40 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f 6e 73  HERE clause cons
25c50 74 61 6e 74 73 20 2a 2f 0a 20 20 20 20 73 74 72  tants */.    str
25c60 75 63 74 20 52 65 6e 61 6d 65 43 74 78 20 2a 70  uct RenameCtx *p
25c70 52 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  Rename;         
25c80 20 20 20 20 20 20 20 2f 2a 20 52 45 4e 41 4d 45         /* RENAME
25c90 20 43 4f 4c 55 4d 4e 20 63 6f 6e 74 65 78 74 20   COLUMN context 
25ca0 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
25cb0 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61   Forward declara
25cc0 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c  tions */.int sql
25cd0 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c  ite3WalkExpr(Wal
25ce0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
25cf0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
25d00 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45  rList(Walker*, E
25d10 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
25d20 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
25d30 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
25d40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
25d50 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61  alkSelectExpr(Wa
25d60 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
25d70 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
25d80 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65  SelectFrom(Walke
25d90 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
25da0 74 20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c  t sqlite3ExprWal
25db0 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45  kNoop(Walker*, E
25dc0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
25dd0 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70  e3SelectWalkNoop
25de0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
25df0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
25e00 65 6c 65 63 74 57 61 6c 6b 46 61 69 6c 28 57 61  electWalkFail(Wa
25e10 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
25e20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25e30 45 42 55 47 0a 76 6f 69 64 20 73 71 6c 69 74 65  EBUG.void sqlite
25e40 33 53 65 6c 65 63 74 57 61 6c 6b 41 73 73 65 72  3SelectWalkAsser
25e50 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  t2(Walker*, Sele
25e60 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ct*);.#endif../*
25e70 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20  .** Return code 
25e80 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74  from the parse-t
25e90 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d  ree walking prim
25ea0 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72  itives and their
25eb0 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a  .** callbacks..*
25ec0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f  /.#define WRC_Co
25ed0 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a  ntinue    0   /*
25ee0 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69   Continue down i
25ef0 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a  nto children */.
25f00 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e  #define WRC_Prun
25f10 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f  e       1   /* O
25f20 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74  mit children but
25f30 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e   continue walkin
25f40 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64  g siblings */.#d
25f50 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20  efine WRC_Abort 
25f60 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61        2   /* Aba
25f70 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61  ndon the tree wa
25f80 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  lk */../*.** An 
25f90 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
25fa0 20 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65   structure repre
25fb0 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f  sents a set of o
25fc0 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a  ne or more CTEs.
25fd0 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ** (common table
25fe0 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72   expressions) cr
25ff0 65 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c  eated by a singl
26000 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a  e WITH clause..*
26010 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a  /.struct With {.
26020 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20    int nCte;     
26030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26040 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43    /* Number of C
26050 54 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20  TEs in the WITH 
26060 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68  clause */.  With
26070 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20   *pOuter;       
26080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
26090 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63  ontaining WITH c
260a0 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a  lause, or NULL *
260b0 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b  /.  struct Cte {
260c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260d0 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
260e0 43 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20  CTE in the WITH 
260f0 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20  clause.... */.  
26100 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
26110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26120 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
26130 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70  s CTE */.    Exp
26140 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20  rList *pCols;   
26150 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26160 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74  List of explicit
26170 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f   column names, o
26180 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65  r NULL */.    Se
26190 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
261a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
261b0 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   The definition 
261c0 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
261d0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
261e0 43 74 65 45 72 72 3b 20 20 20 20 20 20 20 20 20  CteErr;         
261f0 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
26200 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72  age for circular
26210 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
26220 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66   } a[1];.};..#if
26230 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
26240 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
26250 63 65 20 6f 66 20 74 68 65 20 54 72 65 65 56 69  ce of the TreeVi
26260 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65  ew object is use
26270 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74  d for printing t
26280 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
26290 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
262a0 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67   on sqlite3Debug
262b0 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61  Printf() using a
262c0 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e   tree-like view.
262d0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56  .*/.struct TreeV
262e0 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76  iew {.  int iLev
262f0 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
26300 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f  /* Which level o
26310 66 20 74 68 65 20 74 72 65 65 20 77 65 20 61 72  f the tree we ar
26320 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c  e on */.  u8  bL
26330 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20  ine[100];       
26340 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63    /* Draw vertic
26350 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69  al in column i i
26360 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72  f bLine[i] is tr
26370 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20  ue */.};.#endif 
26380 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
26390 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f  */../*.** This o
263a0 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 69 6e  bject is used in
263b0 20 76 61 72 69 6f 69 75 73 20 77 61 79 73 2c 20   varioius ways, 
263c0 61 6c 6c 20 72 65 6c 61 74 65 64 20 74 6f 20 77  all related to w
263d0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 0a  indow functions.
263e0 2a 2a 0a 2a 2a 20 20 20 28 31 29 20 41 20 73 69  **.**   (1) A si
263f0 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66  ngle instance of
26400 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
26410 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
26420 68 65 0a 2a 2a 20 20 20 20 20 20 20 74 68 65 20  he.**       the 
26430 45 78 70 72 2e 70 57 69 6e 20 66 69 65 6c 64 20  Expr.pWin field 
26440 66 6f 72 20 65 61 63 68 20 77 69 6e 64 6f 77 20  for each window 
26450 66 75 6e 63 74 69 6f 6e 20 69 6e 20 61 6e 20 65  function in an e
26460 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 2e 0a  xpression tree..
26470 2a 2a 20 20 20 20 20 20 20 54 68 69 73 20 6f 62  **       This ob
26480 6a 65 63 74 20 68 6f 6c 64 73 20 74 68 65 20 69  ject holds the i
26490 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 6f 6e 74 61  nformation conta
264a0 69 6e 65 64 20 69 6e 20 74 68 65 20 4f 56 45 52  ined in the OVER
264b0 20 63 6c 61 75 73 65 2c 0a 2a 2a 20 20 20 20 20   clause,.**     
264c0 20 20 70 6c 75 73 20 61 64 64 69 74 69 6f 6e 61    plus additiona
264d0 6c 20 66 69 65 6c 64 73 20 75 73 65 64 20 64 75  l fields used du
264e0 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
264f0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 32  tion..**.**   (2
26500 29 20 41 6c 6c 20 77 69 6e 64 6f 77 20 66 75 6e  ) All window fun
26510 63 74 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67  ctions in a sing
26520 6c 65 20 53 45 4c 45 43 54 20 66 6f 72 6d 20 61  le SELECT form a
26530 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 0a 2a 2a 20   linked-list.** 
26540 20 20 20 20 20 20 61 74 74 61 63 68 65 64 20 74        attached t
26550 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e 2e 20 20  o Select.pWin.  
26560 54 68 65 20 57 69 6e 64 6f 77 2e 70 46 75 6e 63  The Window.pFunc
26570 20 61 6e 64 20 57 69 6e 64 6f 77 2e 70 45 78 70   and Window.pExp
26580 72 0a 2a 2a 20 20 20 20 20 20 20 66 69 65 6c 64  r.**       field
26590 73 20 70 6f 69 6e 74 20 62 61 63 6b 20 74 6f 20  s point back to 
265a0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
265b0 68 61 74 20 69 73 20 74 68 65 20 77 69 6e 64 6f  hat is the windo
265c0 77 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  w function..**.*
265d0 2a 20 20 20 28 33 29 20 54 68 65 20 74 65 72 6d  *   (3) The term
265e0 73 20 6f 66 20 74 68 65 20 57 49 4e 44 4f 57 20  s of the WINDOW 
265f0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
26600 43 54 20 61 72 65 20 69 6e 73 74 61 6e 63 65 73  CT are instances
26610 20 6f 66 20 74 68 69 73 0a 2a 2a 20 20 20 20 20   of this.**     
26620 20 20 6f 62 6a 65 63 74 20 6f 6e 20 61 20 6c 69    object on a li
26630 6e 6b 65 64 20 6c 69 73 74 20 61 74 74 61 63 68  nked list attach
26640 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57 69  ed to Select.pWi
26650 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  nDefn..**.** The
26660 20 75 73 65 73 20 28 31 29 20 61 6e 64 20 28 32   uses (1) and (2
26670 29 20 61 72 65 20 72 65 61 6c 6c 79 20 74 68 65  ) are really the
26680 20 73 61 6d 65 20 57 69 6e 64 6f 77 20 6f 62 6a   same Window obj
26690 65 63 74 20 74 68 61 74 20 6a 75 73 74 20 68 61  ect that just ha
266a0 70 70 65 6e 73 0a 2a 2a 20 74 6f 20 62 65 20 61  ppens.** to be a
266b0 63 63 65 73 73 69 62 6c 65 20 69 6e 20 74 77 6f  ccessible in two
266c0 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 2e   different ways.
266d0 20 20 55 73 65 20 28 33 29 20 69 73 20 61 72 65    Use (3) is are
266e0 20 73 65 70 61 72 61 74 65 20 6f 62 6a 65 63 74   separate object
266f0 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 6e  s..*/.struct Win
26700 64 6f 77 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dow {.  char *zN
26710 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
26720 2f 2a 20 4e 61 6d 65 20 6f 66 20 77 69 6e 64 6f  /* Name of windo
26730 77 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  w (may be NULL) 
26740 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
26750 50 61 72 74 69 74 69 6f 6e 3b 20 20 20 2f 2a 20  Partition;   /* 
26760 50 41 52 54 49 54 49 4f 4e 20 42 59 20 63 6c 61  PARTITION BY cla
26770 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
26780 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
26790 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 63 6c 61   /* ORDER BY cla
267a0 75 73 65 20 2a 2f 0a 20 20 75 38 20 65 54 79 70  use */.  u8 eTyp
267b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
267c0 20 2f 2a 20 54 4b 5f 52 41 4e 47 45 20 6f 72 20   /* TK_RANGE or 
267d0 54 4b 5f 52 4f 57 53 20 2a 2f 0a 20 20 75 38 20  TK_ROWS */.  u8 
267e0 65 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20  eStart;         
267f0 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45       /* UNBOUNDE
26800 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45 43  D, CURRENT, PREC
26810 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49  EDING or FOLLOWI
26820 4e 47 20 2a 2f 0a 20 20 75 38 20 65 45 6e 64 3b  NG */.  u8 eEnd;
26830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26840 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55  /* UNBOUNDED, CU
26850 52 52 45 4e 54 2c 20 50 52 45 43 45 44 49 4e 47  RRENT, PRECEDING
26860 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f   or FOLLOWING */
26870 0a 20 20 45 78 70 72 20 2a 70 53 74 61 72 74 3b  .  Expr *pStart;
26880 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
26890 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65  pression for "<e
268a0 78 70 72 3e 20 50 52 45 43 45 44 49 4e 47 22 20  xpr> PRECEDING" 
268b0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 45 6e 64 3b  */.  Expr *pEnd;
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
268d0 45 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 22  Expression for "
268e0 3c 65 78 70 72 3e 20 46 4f 4c 4c 4f 57 49 4e 47  <expr> FOLLOWING
268f0 22 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70  " */.  Window *p
26900 4e 65 78 74 57 69 6e 3b 20 20 20 20 20 20 20 2f  NextWin;       /
26910 2a 20 4e 65 78 74 20 77 69 6e 64 6f 77 20 66 75  * Next window fu
26920 6e 63 74 69 6f 6e 20 62 65 6c 6f 6e 67 69 6e 67  nction belonging
26930 20 74 6f 20 74 68 69 73 20 53 45 4c 45 43 54 20   to this SELECT 
26940 2a 2f 0a 20 20 45 78 70 72 20 2a 70 46 69 6c 74  */.  Expr *pFilt
26950 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
26960 54 68 65 20 46 49 4c 54 45 52 20 65 78 70 72 65  The FILTER expre
26970 73 73 69 6f 6e 20 2a 2f 0a 20 20 46 75 6e 63 44  ssion */.  FuncD
26980 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20  ef *pFunc;      
26990 20 20 20 2f 2a 20 54 68 65 20 66 75 6e 63 74 69     /* The functi
269a0 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 45 70 68  on */.  int iEph
269b0 43 73 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Csr;            
269c0 2f 2a 20 50 61 72 74 69 74 69 6f 6e 20 62 75 66  /* Partition buf
269d0 66 65 72 20 6f 72 20 50 65 65 72 20 62 75 66 66  fer or Peer buff
269e0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41  er */.  int regA
269f0 63 63 75 6d 3b 0a 20 20 69 6e 74 20 72 65 67 52  ccum;.  int regR
26a00 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20 63 73 72  esult;.  int csr
26a10 41 70 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  App;            
26a20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 63 75 72   /* Function cur
26a30 73 6f 72 20 28 75 73 65 64 20 62 79 20 6d 69 6e  sor (used by min
26a40 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72  /max) */.  int r
26a50 65 67 41 70 70 3b 20 20 20 20 20 20 20 20 20 20  egApp;          
26a60 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 72     /* Function r
26a70 65 67 69 73 74 65 72 20 28 61 6c 73 6f 20 75 73  egister (also us
26a80 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a  ed by min/max) *
26a90 2f 0a 20 20 69 6e 74 20 72 65 67 50 61 72 74 3b  /.  int regPart;
26aa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
26ab0 69 72 73 74 20 69 6e 20 61 20 73 65 74 20 6f 66  irst in a set of
26ac0 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
26ad0 6e 67 20 50 41 52 54 49 54 49 4f 4e 20 42 59 0a  ng PARTITION BY.
26ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26af0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 64            ** and
26b00 20 4f 52 44 45 52 20 42 59 20 76 61 6c 75 65 73   ORDER BY values
26b10 20 66 6f 72 20 74 68 65 20 77 69 6e 64 6f 77 20   for the window 
26b20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 77 6e 65  */.  Expr *pOwne
26b30 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
26b40 45 78 70 72 65 73 73 69 6f 6e 20 6f 62 6a 65 63  Expression objec
26b50 74 20 74 68 69 73 20 77 69 6e 64 6f 77 20 69 73  t this window is
26b60 20 61 74 74 61 63 68 65 64 20 74 6f 20 2a 2f 0a   attached to */.
26b70 20 20 69 6e 74 20 6e 42 75 66 66 65 72 43 6f 6c    int nBufferCol
26b80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
26b90 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
26ba0 6e 20 62 75 66 66 65 72 20 74 61 62 6c 65 20 2a  n buffer table *
26bb0 2f 0a 20 20 69 6e 74 20 69 41 72 67 43 6f 6c 3b  /.  int iArgCol;
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
26bd0 66 66 73 65 74 20 6f 66 20 66 69 72 73 74 20 61  ffset of first a
26be0 72 67 75 6d 65 6e 74 20 66 6f 72 20 74 68 69 73  rgument for this
26bf0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a   function */.};.
26c00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26c10 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a  OMIT_WINDOWFUNC.
26c20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
26c30 6f 77 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  owDelete(sqlite3
26c40 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69  *, Window*);.voi
26c50 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c  d sqlite3WindowL
26c60 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
26c70 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70  3 *db, Window *p
26c80 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
26c90 65 33 57 69 6e 64 6f 77 41 6c 6c 6f 63 28 50 61  e3WindowAlloc(Pa
26ca0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
26cb0 45 78 70 72 2a 2c 20 69 6e 74 20 2c 20 45 78 70  Expr*, int , Exp
26cc0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
26cd0 33 57 69 6e 64 6f 77 41 74 74 61 63 68 28 50 61  3WindowAttach(Pa
26ce0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 57 69 6e  rse*, Expr*, Win
26cf0 64 6f 77 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  dow*);.int sqlit
26d00 65 33 57 69 6e 64 6f 77 43 6f 6d 70 61 72 65 28  e3WindowCompare(
26d10 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c  Parse*, Window*,
26d20 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20   Window*);.void 
26d30 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64  sqlite3WindowCod
26d40 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 57 69  eInit(Parse*, Wi
26d50 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndow*);.void sql
26d60 69 74 65 33 57 69 6e 64 6f 77 43 6f 64 65 53 74  ite3WindowCodeSt
26d70 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ep(Parse*, Selec
26d80 74 2a 2c 20 57 68 65 72 65 49 6e 66 6f 2a 2c 20  t*, WhereInfo*, 
26d90 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
26da0 71 6c 69 74 65 33 57 69 6e 64 6f 77 52 65 77 72  qlite3WindowRewr
26db0 69 74 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ite(Parse*, Sele
26dc0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
26dd0 33 45 78 70 61 6e 64 53 75 62 71 75 65 72 79 28  3ExpandSubquery(
26de0 50 61 72 73 65 2a 2c 20 73 74 72 75 63 74 20 53  Parse*, struct S
26df0 72 63 4c 69 73 74 5f 69 74 65 6d 2a 29 3b 0a 76  rcList_item*);.v
26e00 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
26e10 77 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  wUpdate(Parse*, 
26e20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a  Window*, Window*
26e30 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 57 69 6e  , FuncDef*);.Win
26e40 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64  dow *sqlite3Wind
26e50 6f 77 44 75 70 28 73 71 6c 69 74 65 33 20 2a 64  owDup(sqlite3 *d
26e60 62 2c 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 2c  b, Expr *pOwner,
26e70 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e   Window *p);.Win
26e80 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64  dow *sqlite3Wind
26e90 6f 77 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  owListDup(sqlite
26ea0 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70  3 *db, Window *p
26eb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
26ec0 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 76  indowFunctions(v
26ed0 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  oid);.#else.# de
26ee0 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e 64  fine sqlite3Wind
26ef0 6f 77 44 65 6c 65 74 65 28 61 2c 62 29 0a 23 20  owDelete(a,b).# 
26f00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
26f10 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 29 0a  ndowFunctions().
26f20 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26f30 57 69 6e 64 6f 77 41 74 74 61 63 68 28 61 2c 62  WindowAttach(a,b
26f40 2c 63 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,c).#endif../*.*
26f50 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
26f60 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
26f70 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
26f80 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
26f90 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
26fa0 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
26fb0 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
26fc0 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
26fd0 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
26fe0 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
26ff0 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
27010 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
27020 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27040 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
27050 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
27060 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
27070 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
27080 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
27090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270b0 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f            \.}../
270c0 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
270d0 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
270e0 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
270f0 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
27100 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
27110 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
27120 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
27130 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
27140 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
27150 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
27160 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
27170 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
27180 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
27190 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
271a0 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
271b0 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
271c0 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
271d0 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
271e0 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
271f0 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
27200 71 6c 69 74 65 33 52 65 70 6f 72 74 45 72 72 6f  qlite3ReportErro
27210 72 28 69 6e 74 20 69 45 72 72 2c 20 69 6e 74 20  r(int iErr, int 
27220 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68  lineno, const ch
27230 61 72 20 2a 7a 54 79 70 65 29 3b 0a 69 6e 74 20  ar *zType);.int 
27240 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
27250 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
27260 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
27270 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
27280 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
27290 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
272a0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
272b0 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
272c0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
272d0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
272e0 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
272f0 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
27300 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
27310 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
27320 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
27330 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
27340 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54  __).#ifdef SQLIT
27350 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71  E_DEBUG.  int sq
27360 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
27370 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
27380 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
27390 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
273a0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
273b0 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29  oError(int,Pgno)
273c0 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ;.# define SQLIT
273d0 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c  E_NOMEM_BKPT sql
273e0 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f  ite3NomemError(_
273f0 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e  _LINE__).# defin
27400 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  e SQLITE_IOERR_N
27410 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65  OMEM_BKPT sqlite
27420 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72  3IoerrnomemError
27430 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66  (__LINE__).# def
27440 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
27450 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74  PT_PGNO(P) sqlit
27460 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72  e3CorruptPgnoErr
27470 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29  or(__LINE__,(P))
27480 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
27490 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
274a0 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23  T SQLITE_NOMEM.#
274b0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
274c0 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
274d0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
274e0 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
274f0 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28  TE_CORRUPT_PGNO(
27500 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  P) sqlite3Corrup
27510 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
27520 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
27530 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74  TS3 and FTS4 bot
27540 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75 61  h require virtua
27550 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a  l table support.
27560 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
27570 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
27580 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66  ALTABLE).# undef
27590 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
275a0 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  TS3.# undef SQLI
275b0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23  TE_ENABLE_FTS4.#
275c0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  endif../*.** FTS
275d0 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65  4 is really an e
275e0 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53  xtension for FTS
275f0 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65  3.  It is enable
27600 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53  d using the.** S
27610 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27620 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f  3 macro.  But to
27630 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
27640 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a   we also call.**
27650 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
27660 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f  LE_FTS4 macro to
27670 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69   serve as an ali
27680 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e  as for SQLITE_EN
27690 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69  ABLE_FTS3..*/.#i
276a0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
276b0 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26  _ENABLE_FTS4) &&
276c0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
276d0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20  _ENABLE_FTS3).# 
276e0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
276f0 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64  ABLE_FTS3 1.#end
27700 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
27710 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
27720 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
27730 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
27740 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
27750 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
27760 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
27770 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
27780 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
27790 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
277a0 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
277b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
277c0 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
277d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
277e0 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
277f0 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
27800 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
27810 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
27820 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
27830 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
27840 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
27850 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
27860 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
27870 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
27880 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
27890 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
278a0 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
278b0 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
278c0 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
278d0 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
278e0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
278f0 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
27900 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
27910 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
27920 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
27930 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
27940 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
27950 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
27960 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
27970 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
27980 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
27990 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
279a0 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
279b0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
279c0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
279d0 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
279e0 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
279f0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
27a00 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
27a10 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
27a20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
27a30 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
27a40 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
27a50 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
27a60 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
27a70 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
27a80 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
27a90 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
27aa0 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
27ab0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
27ac0 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
27ad0 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
27ae0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27af0 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x)]).# define sq
27b00 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20  lite3Isquote(x) 
27b10 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
27b20 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
27b30 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c  r)(x)]&0x80).#el
27b40 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
27b50 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
27b60 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
27b70 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
27b80 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
27b90 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
27ba0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
27bb0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
27bc0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
27bd0 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
27be0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
27bf0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
27c00 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
27c10 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
27c20 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
27c30 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
27c40 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
27c50 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
27c60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27c70 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
27c80 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
27c90 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
27ca0 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
27cb0 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
27cc0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27cd0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
27ce0 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20  te3Isquote(x)   
27cf0 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d  ((x)=='"'||(x)==
27d00 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c  '\''||(x)=='['||
27d10 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66  (x)=='`').#endif
27d20 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64  .int sqlite3IsId
27d30 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a 0a 2a 2a  Char(u8);../*.**
27d40 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
27d50 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
27d60 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49  .int sqlite3StrI
27d70 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Cmp(const char*,
27d80 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
27d90 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  t sqlite3Strlen3
27da0 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  0(const char*);.
27db0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
27dc0 74 72 6c 65 6e 33 30 4e 4e 28 43 29 20 28 73 74  trlen30NN(C) (st
27dd0 72 6c 65 6e 28 43 29 26 30 78 33 66 66 66 66 66  rlen(C)&0x3fffff
27de0 66 66 29 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  ff).char *sqlite
27df0 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75  3ColumnType(Colu
27e00 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66  mn*,char*);.#def
27e10 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
27e20 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
27e30 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
27e40 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
27e50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
27e60 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
27e70 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
27e80 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  loc(u64);.void *
27e90 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
27ea0 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  o(u64);.void *sq
27eb0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
27ec0 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  o(sqlite3*, u64)
27ed0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
27ee0 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
27ef0 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
27f00 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
27f10 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  RawNN(sqlite3*, 
27f20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  u64);.char *sqli
27f30 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69  te3DbStrDup(sqli
27f40 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
27f50 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
27f60 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65  DbStrNDup(sqlite
27f70 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
27f80 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  u64);.char *sqli
27f90 74 65 33 44 62 53 70 61 6e 44 75 70 28 73 71 6c  te3DbSpanDup(sql
27fa0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
27fb0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
27fc0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61  void *sqlite3Rea
27fd0 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29  lloc(void*, u64)
27fe0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
27ff0 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73  bReallocOrFree(s
28000 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
28010 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
28020 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73  lite3DbRealloc(s
28030 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
28040 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c  , u64);.void sql
28050 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74  ite3DbFree(sqlit
28060 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
28070 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e  d sqlite3DbFreeN
28080 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  N(sqlite3*, void
28090 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
280a0 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29  allocSize(void*)
280b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d  ;.int sqlite3DbM
280c0 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65  allocSize(sqlite
280d0 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
280e0 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c   *sqlite3PageMal
280f0 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
28100 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76  qlite3PageFree(v
28110 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
28120 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74  te3MemSetDefault
28130 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20  (void);.#ifndef 
28140 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
28150 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  E.void sqlite3Be
28160 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28  nignMallocHooks(
28170 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20  void (*)(void), 
28180 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b  void (*)(void));
28190 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
281a0 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c  te3HeapNearlyFul
281b0 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20  l(void);../*.** 
281c0 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  On systems with 
281d0 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63  ample stack spac
281e0 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f  e and that suppo
281f0 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b  rt alloca(), mak
28200 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f  e.** use of allo
28210 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73  ca() to obtain s
28220 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61  pace for large a
28230 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73  utomatic objects
28240 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a  .  By default,.*
28250 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  * obtain space f
28260 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a  rom malloc()..**
28270 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29  .** The alloca()
28280 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72   routine never r
28290 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68  eturns NULL.  Th
282a0 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f  is will cause co
282b0 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74  de paths.** that
282c0 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74   deal with sqlit
282d0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66  e3StackAlloc() f
282e0 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e  ailures to be un
282f0 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69  reachable..*/.#i
28300 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f  fdef SQLITE_USE_
28310 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20  ALLOCA.# define 
28320 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
28330 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f  cRaw(D,N)   allo
28340 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  ca(N).# define s
28350 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
28360 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65  Zero(D,N)  memse
28370 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20  t(alloca(N), 0, 
28380 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
28390 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
283a0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
283b0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
283c0 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c  ocRaw(D,N)   sql
283d0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
283e0 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
283f0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
28400 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65  ero(D,N)  sqlite
28410 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c  3DbMallocZero(D,
28420 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
28430 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
28440 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  )       sqlite3D
28450 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69  bFree(D,P).#endi
28460 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  f../* Do not all
28470 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35 20  ow both MEMSYS5 
28480 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20 62  and MEMSYS3 to b
28490 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74 68  e defined togeth
284a0 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a 20  er.  If they.** 
284b0 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d  are, disable MEM
284c0 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53  SYS3.*/.#ifdef S
284d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
284e0 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
284f0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
28500 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
28510 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64  sys5(void);.#und
28520 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
28530 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66 0a  _MEMSYS3.#endif.
28540 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
28550 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e  ABLE_MEMSYS3.con
28560 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
28570 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
28580 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69  emGetMemsys3(voi
28590 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  d);.#endif...#if
285a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  ndef SQLITE_MUTE
285b0 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33  X_OMIT.  sqlite3
285c0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
285d0 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66  onst *sqlite3Def
285e0 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b  aultMutex(void);
285f0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
28600 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
28610 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78  sqlite3NoopMutex
28620 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
28630 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
28640 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b  MutexAlloc(int);
28650 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
28660 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20  texInit(void);. 
28670 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
28680 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64  xEnd(void);.#end
28690 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
286a0 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
286b0 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
286c0 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50  QLITE_MUTEX_NOOP
286d0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
286e0 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f  MemoryBarrier(vo
286f0 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  id);.#else.# def
28700 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72  ine sqlite3Memor
28710 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69  yBarrier().#endi
28720 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  f..sqlite3_int64
28730 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
28740 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
28750 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28 69  qlite3StatusUp(i
28760 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28770 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e  qlite3StatusDown
28780 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
28790 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48 69   sqlite3StatusHi
287a0 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e 74  ghwater(int, int
287b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f  );.int sqlite3Lo
287c0 6f 6b 61 73 69 64 65 55 73 65 64 28 73 71 6c 69  okasideUsed(sqli
287d0 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a 20  te3*,int*);../* 
287e0 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65  Access to mutexe
287f0 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
28800 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71  3_status() */.sq
28810 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
28820 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65 78  ite3Pcache1Mutex
28830 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f  (void);.sqlite3_
28840 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61  mutex *sqlite3Ma
28850 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b  llocMutex(void);
28860 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
28870 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54  LITE_ENABLE_MULT
28880 49 54 48 52 45 41 44 45 44 5f 43 48 45 43 4b 53  ITHREADED_CHECKS
28890 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
288a0 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29  LITE_MUTEX_OMIT)
288b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 74  .void sqlite3Mut
288c0 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69  exWarnOnContenti
288d0 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  on(sqlite3_mutex
288e0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
288f0 6e 65 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57  ne sqlite3MutexW
28900 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28  arnOnContention(
28910 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  x).#endif..#ifnd
28920 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
28930 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
28940 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
28950 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a  (double);.#else.
28960 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28970 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64  IsNaN(X)  0.#end
28980 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
28990 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
289a0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
289b0 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
289c0 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20  on about SQL.** 
289d0 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65  functions argume
289e0 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65  nts that are the
289f0 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74   parameters to t
28a00 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63  he printf() func
28a10 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
28a20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
28a30 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20  {.  int nArg;   
28a40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
28a50 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  Total number of 
28a60 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69  arguments */.  i
28a70 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20  nt nUsed;       
28a80 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
28a90 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75  r of arguments u
28aa0 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
28ab0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
28ac0 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20  apArg;   /* The 
28ad0 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20  argument values 
28ae0 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73 71 6c  */.};..char *sql
28af0 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69  ite3MPrintf(sqli
28b00 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
28b10 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
28b20 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71  lite3VMPrintf(sq
28b30 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
28b40 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69  r*, va_list);.#i
28b50 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
28b60 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
28b70 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ed(SQLITE_HAVE_O
28b80 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20  S_TRACE).  void 
28b90 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
28ba0 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  tf(const char*, 
28bb0 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ...);.#endif.#if
28bc0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28bd0 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71  TEST).  void *sq
28be0 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50  lite3TestTextToP
28bf0 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  tr(const char*);
28c00 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
28c10 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
28c20 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  G).  void sqlite
28c30 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72  3TreeViewExpr(Tr
28c40 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
28c50 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  xpr*, u8);.  voi
28c60 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
28c70 77 42 61 72 65 45 78 70 72 4c 69 73 74 28 54 72  wBareExprList(Tr
28c80 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
28c90 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
28ca0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
28cb0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
28cc0 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a  prList(TreeView*
28cd0 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  , const ExprList
28ce0 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  *, u8, const cha
28cf0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
28d00 74 65 33 54 72 65 65 56 69 65 77 53 72 63 4c 69  te3TreeViewSrcLi
28d10 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
28d20 6e 73 74 20 53 72 63 4c 69 73 74 2a 29 3b 0a 20  nst SrcList*);. 
28d30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
28d40 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
28d50 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
28d60 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  ect*, u8);.  voi
28d70 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
28d80 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c  wWith(TreeView*,
28d90 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38   const With*, u8
28da0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
28db0 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
28dc0 43 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  C.  void sqlite3
28dd0 54 72 65 65 56 69 65 77 57 69 6e 64 6f 77 28 54  TreeViewWindow(T
28de0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
28df0 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 20 20  Window*, u8);.  
28e00 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
28e10 56 69 65 77 57 69 6e 46 75 6e 63 28 54 72 65 65  ViewWinFunc(Tree
28e20 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e  View*, const Win
28e30 64 6f 77 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  dow*, u8);.#endi
28e40 66 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20  f.#endif...void 
28e50 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
28e60 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65  (char **, sqlite
28e70 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  3*, const char*)
28e80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
28e90 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63  rorMsg(Parse*, c
28ea0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
28eb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
28ec0 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f  quote(char*);.vo
28ed0 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49  id sqlite3TokenI
28ee0 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a  nit(Token*,char*
28ef0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  );.int sqlite3Ke
28f00 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20  ywordCode(const 
28f10 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
28f20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28f30 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
28f40 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
28f50 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  char **);.void s
28f60 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69  qlite3FinishCodi
28f70 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  ng(Parse*);.int 
28f80 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65  sqlite3GetTempRe
28f90 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  g(Parse*);.void 
28fa0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
28fb0 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74  mpReg(Parse*,int
28fc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
28fd0 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  tTempRange(Parse
28fe0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
28ff0 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
29000 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
29010 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29020 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61  e3ClearTempRegCa
29030 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  che(Parse*);.#if
29040 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
29050 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65  .int sqlite3NoTe
29060 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65  mpsInRange(Parse
29070 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64  *,int,int);.#end
29080 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  if.Expr *sqlite3
29090 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
290a0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
290b0 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
290c0 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
290d0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
290e0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
290f0 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
29100 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
29110 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
29120 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
29130 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
29140 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  t, Expr*, Expr*)
29150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 45  ;.void sqlite3PE
29160 78 70 72 41 64 64 53 65 6c 65 63 74 28 50 61 72  xprAddSelect(Par
29170 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65  se*, Expr*, Sele
29180 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ct*);.Expr *sqli
29190 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74  te3ExprAnd(sqlit
291a0 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  e3*,Expr*, Expr*
291b0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
291c0 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
291d0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
291e0 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
291f0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73  d sqlite3ExprAss
29200 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72  ignVarNumber(Par
29210 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32 29  se*, Expr*, u32)
29220 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29230 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
29240 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
29250 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
29260 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
29270 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
29280 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
29290 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
292a0 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a  endVector(Parse*
292b0 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73  ,ExprList*,IdLis
292c0 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
292d0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
292e0 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72  etSortOrder(Expr
292f0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  List*,int);.void
29300 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
29310 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45  SetName(Parse*,E
29320 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c  xprList*,Token*,
29330 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29340 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61  e3ExprListSetSpa
29350 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
29360 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t*,const char*,c
29370 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
29380 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
29390 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
293a0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33  , ExprList*);.u3
293b0 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  2 sqlite3ExprLis
293c0 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70  tFlags(const Exp
293d0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
293e0 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33  ite3Init(sqlite3
293f0 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
29400 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
29410 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ack(void*, int, 
29420 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b  char**, char**);
29430 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
29440 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  One(sqlite3*, in
29450 74 2c 20 63 68 61 72 2a 2a 2c 20 75 33 32 29 3b  t, char**, u32);
29460 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
29470 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  gma(Parse*,Token
29480 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
29490 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
294a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
294b0 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73  LTABLE.Module *s
294c0 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61 62  qlite3PragmaVtab
294d0 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
294e0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  *,const char *zN
294f0 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ame);.#endif.voi
29500 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c  d sqlite3ResetAl
29510 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
29520 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a  tion(sqlite3*);.
29530 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
29540 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74  tOneSchema(sqlit
29550 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
29560 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61  qlite3CollapseDa
29570 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69  tabaseArray(sqli
29580 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
29590 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
295a0 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
295b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
295c0 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65  DeleteColumnName
295d0 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65  s(sqlite3*,Table
295e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
295f0 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69  olumnsFromExprLi
29600 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  st(Parse*,ExprLi
29610 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a  st*,i16*,Column*
29620 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29630 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54  SelectAddColumnT
29640 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28  ypeAndCollation(
29650 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65  Parse*,Table*,Se
29660 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
29670 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f  qlite3ResultSetO
29680 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53  fSelect(Parse*,S
29690 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71  elect*);.void sq
296a0 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54  lite3OpenMasterT
296b0 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e  able(Parse *, in
296c0 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  t);.Index *sqlit
296d0 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
296e0 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73  x(Table*);.i16 s
296f0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e  qlite3ColumnOfIn
29700 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29  dex(Index*, i16)
29710 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
29720 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  artTable(Parse*,
29730 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
29740 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  t,int,int,int);.
29750 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  #if SQLITE_ENABL
29760 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
29770 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
29780 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46  olumnPropertiesF
29790 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20  romName(Table*, 
297a0 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a  Column*);.#else.
297b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
297c0 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
297d0 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a  FromName(T,C) /*
297e0 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66   no-op */.#endif
297f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
29800 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f  Column(Parse*,To
29810 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  ken*,Token*);.vo
29820 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
29830 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
29840 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
29850 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
29860 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
29870 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
29880 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
29890 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
298a0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
298b0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65  oid sqlite3AddDe
298c0 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65  faultValue(Parse
298d0 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
298e0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
298f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
29900 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72  dCollateType(Par
29910 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
29920 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62  id sqlite3EndTab
29930 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
29940 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63  ,Token*,u8,Selec
29950 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
29960 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63  ParseUri(const c
29970 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
29980 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a  ,unsigned int*,.
29990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299a0 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a      sqlite3_vfs*
299b0 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a  *,char**,char **
299c0 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65  );.Btree *sqlite
299d0 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73  3DbNameToBtree(s
299e0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
299f0 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  ar*);..#ifdef SQ
29a00 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
29a10 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29a20 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49  FaultSim(X) SQLI
29a30 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e  TE_OK.#else.  in
29a40 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  t sqlite3FaultSi
29a50 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  m(int);.#endif..
29a60 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42  Bitvec *sqlite3B
29a70 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29  itvecCreate(u32)
29a80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
29a90 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c  vecTest(Bitvec*,
29aa0 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
29ab0 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e  e3BitvecTestNotN
29ac0 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ull(Bitvec*, u32
29ad0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
29ae0 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c  tvecSet(Bitvec*,
29af0 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
29b00 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42  te3BitvecClear(B
29b10 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69  itvec*, u32, voi
29b20 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
29b30 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42  3BitvecDestroy(B
29b40 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c  itvec*);.u32 sql
29b50 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42  ite3BitvecSize(B
29b60 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66  itvec*);.#ifndef
29b70 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
29b80 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  LE.int sqlite3Bi
29b90 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28  tvecBuiltinTest(
29ba0 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69  int,int*);.#endi
29bb0 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74  f..RowSet *sqlit
29bc0 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c  e3RowSetInit(sql
29bd0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
29be0 69 74 65 33 52 6f 77 53 65 74 44 65 6c 65 74 65  ite3RowSetDelete
29bf0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
29c00 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
29c10 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
29c20 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
29c30 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b  t(RowSet*, i64);
29c40 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
29c50 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20  etTest(RowSet*, 
29c60 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29  int iBatch, i64)
29c70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
29c80 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
29c90 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
29ca0 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
29cb0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
29cc0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ken*,Token*,Expr
29cd0 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  List*,Select*,in
29ce0 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  t,int);..#if !de
29cf0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
29d00 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69  T_VIEW) || !defi
29d10 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
29d20 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20  VIRTUALTABLE).  
29d30 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47  int sqlite3ViewG
29d40 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61  etColumnNames(Pa
29d50 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  rse*,Table*);.#e
29d60 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
29d70 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
29d80 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65  nNames(A,B) 0.#e
29d90 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
29da0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
29db0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62  .  int sqlite3Db
29dc0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d  MaskAllZero(yDbM
29dd0 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ask);.#endif.voi
29de0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
29df0 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
29e00 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
29e10 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
29e20 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
29e30 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
29e40 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29e50 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
29e60 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
29e70 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65 65  void sqlite3Free
29e80 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 20  Index(sqlite3*, 
29e90 49 6e 64 65 78 2a 29 3b 0a 23 69 66 6e 64 65 66  Index*);.#ifndef
29ea0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
29eb0 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69  OINCREMENT.  voi
29ec0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
29ed0 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73  rementBegin(Pars
29ee0 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f  e *pParse);.  vo
29ef0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
29f00 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65  crementEnd(Parse
29f10 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65   *pParse);.#else
29f20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29f30 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
29f40 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
29f50 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
29f60 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69  mentEnd(X).#endi
29f70 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  f.void sqlite3In
29f80 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
29f90 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
29fa0 49 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55 70  IdList*, int, Up
29fb0 73 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  sert*);.void *sq
29fc0 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
29fd0 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
29fe0 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
29ff0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
2a000 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 50 61  3IdListAppend(Pa
2a010 72 73 65 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  rse*, IdList*, T
2a020 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2a030 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
2a040 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
2a050 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
2a060 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
2a070 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
2a080 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
2a090 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
2a0a0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
2a0b0 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
2a0c0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
2a0d0 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
2a0e0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
2a0f0 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
2a100 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
2a110 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
2a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a140 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
2a150 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
2a160 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
2a170 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
2a180 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
2a190 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
2a1a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
2a1b0 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61 72  ListFuncArgs(Par
2a1c0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
2a1d0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2a1e0 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
2a1f0 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
2a200 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
2a210 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
2a220 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
2a230 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
2a240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a250 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
2a260 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
2a270 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
2a280 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
2a290 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
2a2a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a2b0 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
2a2c0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
2a2d0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
2a2e0 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
2a2f0 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
2a300 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76  6,int,char**);.v
2a310 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
2a320 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
2a330 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
2a340 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
2a350 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
2a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a370 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
2a380 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
2a390 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
2a3a0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2a3b0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2a3c0 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
2a3d0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
2a3e0 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
2a3f0 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
2a400 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
2a410 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
2a420 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
2a430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a440 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
2a450 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a  rList*,u32,Expr*
2a460 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a470 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
2a480 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
2a490 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
2a4a0 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
2a4b0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
2a4c0 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
2a4d0 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
2a4e0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
2a4f0 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
2a500 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
2a510 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
2a520 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
2a530 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2a540 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
2a550 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
2a560 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2a570 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
2a580 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
2a590 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  re(Parse*,SrcLis
2a5a0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
2a5b0 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  t*,Expr*,char*);
2a5c0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2a5d0 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
2a5e0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2a5f0 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
2a600 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2a610 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61  sqlite3Update(Pa
2a620 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2a630 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
2a640 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  int,ExprList*,Ex
2a650 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pr*,.           
2a660 20 20 20 20 20 20 20 20 55 70 73 65 72 74 2a 29          Upsert*)
2a670 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
2a680 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
2a690 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
2a6a0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
2a6b0 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
2a6c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
2a6d0 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
2a6e0 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  o*);.LogEst sqli
2a6f0 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
2a700 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
2a710 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2a720 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
2a730 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2a740 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
2a750 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
2a760 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2a770 65 72 65 4f 72 64 65 72 42 79 4c 69 6d 69 74 4f  ereOrderByLimitO
2a780 70 74 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ptLabel(WhereInf
2a790 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2a7a0 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68  WhereIsSorted(Wh
2a7b0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2a7c0 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69  qlite3WhereConti
2a7d0 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  nueLabel(WhereIn
2a7e0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2a7f0 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c  3WhereBreakLabel
2a800 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2a810 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b  t sqlite3WhereOk
2a820 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66  OnePass(WhereInf
2a830 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69  o*, int*);.#defi
2a840 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20  ne ONEPASS_OFF  
2a850 20 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20      0        /* 
2a860 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e  Use of ONEPASS n
2a870 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64  ot allowed */.#d
2a880 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49  efine ONEPASS_SI
2a890 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20 20 20  NGLE   1        
2a8a0 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64  /* ONEPASS valid
2a8b0 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f   for a single ro
2a8c0 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66  w update */.#def
2a8d0 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ine ONEPASS_MULT
2a8e0 49 20 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a  I    2        /*
2a8f0 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69   ONEPASS is vali
2a900 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72  d for multiple r
2a910 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ows */.void sqli
2a920 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49  te3ExprCodeLoadI
2a930 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65  ndexColumn(Parse
2a940 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
2a950 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
2a960 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
2a970 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20  tColumn(Parse*, 
2a980 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2a990 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
2a9a0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2a9b0 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
2a9c0 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
2a9d0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2a9e0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a9f0 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c  CodeMove(Parse*,
2aa00 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2aa10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2aa20 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
2aa30 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
2aa40 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43  sqlite3ExprCodeC
2aa50 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  opy(Parse*, Expr
2aa60 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2aa70 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63  lite3ExprCodeFac
2aa80 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  torable(Parse*, 
2aa90 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2aaa0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2aab0 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45  AtInit(Parse*, E
2aac0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2aad0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
2aae0 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  emp(Parse*, Expr
2aaf0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
2ab00 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72  lite3ExprCodeTar
2ab10 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  get(Parse*, Expr
2ab20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2ab30 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64  lite3ExprCodeAnd
2ab40 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78  Cache(Parse*, Ex
2ab50 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
2ab60 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78  qlite3ExprCodeEx
2ab70 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
2ab80 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
2ab90 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65  nt, u8);.#define
2aba0 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50   SQLITE_ECEL_DUP
2abb0 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44        0x01  /* D
2abc0 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77  eep, not shallow
2abd0 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69   copies */.#defi
2abe0 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46  ne SQLITE_ECEL_F
2abf0 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a  ACTOR   0x02  /*
2ac00 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   Factor out cons
2ac10 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64  tant terms */.#d
2ac20 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
2ac30 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20  L_REF      0x04 
2ac40 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74   /* Use ExprList
2ac50 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c  .u.x.iOrderByCol
2ac60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
2ac70 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20  TE_ECEL_OMITREF 
2ac80 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69   0x08  /* Omit i
2ac90 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69  f ExprList.u.x.i
2aca0 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f  OrderByCol */.vo
2acb0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
2acc0 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70  True(Parse*, Exp
2acd0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
2ace0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
2acf0 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45  fFalse(Parse*, E
2ad00 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
2ad10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2ad20 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73  rIfFalseDup(Pars
2ad30 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2ad40 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  int);.Table *sql
2ad50 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71  ite3FindTable(sq
2ad60 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2ad70 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2ad80 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45  ;.#define LOCATE
2ad90 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a 23 64  _VIEW    0x01.#d
2ada0 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45  efine LOCATE_NOE
2adb0 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20  RR   0x02.Table 
2adc0 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
2add0 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66  ble(Parse*,u32 f
2ade0 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a  lags,const char*
2adf0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2ae00 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
2ae10 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
2ae20 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73  rse*,u32 flags,s
2ae30 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
2ae40 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
2ae50 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
2ae60 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
2ae70 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2ae80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
2ae90 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
2aea0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
2aeb0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
2aec0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
2aed0 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
2aee0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
2aef0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2af00 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
2af10 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  rse*,Token*,Expr
2af20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2af30 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c  unVacuum(char**,
2af40 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20   sqlite3*, int, 
2af50 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
2af60 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61  .char *sqlite3Na
2af70 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69  meFromToken(sqli
2af80 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
2af90 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2afa0 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45 78 70  mpare(Parse*,Exp
2afb0 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
2afc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2afd0 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78 70 72  CompareSkip(Expr
2afe0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2aff0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c  int sqlite3ExprL
2b000 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c  istCompare(ExprL
2b010 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
2b020 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2b030 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70  e3ExprImpliesExp
2b040 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20  r(Parse*,Expr*, 
2b050 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2b060 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
2b070 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78  iesNonNullRow(Ex
2b080 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  pr*,int);.void s
2b090 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
2b0a0 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
2b0b0 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
2b0c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2b0d0 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
2b0e0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
2b0f0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
2b100 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65 64  lite3ExprCovered
2b110 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69  ByIndex(Expr*, i
2b120 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a  nt iCur, Index *
2b130 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pIdx);.int sqlit
2b140 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68  e3FunctionUsesTh
2b150 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63  isSrc(Expr*, Src
2b160 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71  List*);.Vdbe *sq
2b170 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72  lite3GetVdbe(Par
2b180 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  se*);.#ifndef SQ
2b190 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
2b1a0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
2b1b0 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b  SaveState(void);
2b1c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
2b1d0 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f  gRestoreState(vo
2b1e0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  id);.#endif.void
2b1f0 20 73 71 6c 69 74 65 33 46 61 73 74 50 72 6e 67   sqlite3FastPrng
2b200 49 6e 69 74 28 46 61 73 74 50 72 6e 67 2a 29 3b  Init(FastPrng*);
2b210 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 61 73  .void sqlite3Fas
2b220 74 52 61 6e 64 6f 6d 6e 65 73 73 28 46 61 73 74  tRandomness(Fast
2b230 50 72 6e 67 2a 2c 20 69 6e 74 20 4e 2c 20 76 6f  Prng*, int N, vo
2b240 69 64 20 2a 50 29 3b 0a 76 6f 69 64 20 73 71 6c  id *P);.void sql
2b250 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
2b260 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2b270 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
2b280 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
2b290 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
2b2a0 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
2b2b0 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
2b2c0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
2b2d0 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
2b2e0 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
2b2f0 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
2b300 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
2b310 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
2b320 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
2b330 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
2b340 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
2b350 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2b360 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
2b370 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
2b380 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
2b390 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
2b3a0 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
2b3b0 20 73 71 6c 69 74 65 33 45 78 70 72 49 64 54 6f   sqlite3ExprIdTo
2b3c0 54 72 75 65 46 61 6c 73 65 28 45 78 70 72 2a 29  TrueFalse(Expr*)
2b3d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b3e0 72 54 72 75 74 68 56 61 6c 75 65 28 63 6f 6e 73  rTruthValue(cons
2b3f0 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t Expr*);.int sq
2b400 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
2b410 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ant(Expr*);.int 
2b420 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
2b430 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70  stantNotJoin(Exp
2b440 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2b450 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
2b460 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20  Function(Expr*, 
2b470 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
2b480 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
2b490 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
2b4a0 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Expr*, ExprList*
2b4b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b4c0 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e  prIsTableConstan
2b4d0 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69  t(Expr*,int);.#i
2b4e0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2b4f0 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a  LE_CURSOR_HINTS.
2b500 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b510 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28  ontainsSubquery(
2b520 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Expr*);.#endif.i
2b530 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2b540 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
2b550 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2b560 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
2b570 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74  onst Expr*);.int
2b580 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
2b590 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
2b5a0 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
2b5b0 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
2b5c0 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
2b5d0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2b5e0 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
2b5f0 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a  lete(.    Parse*
2b600 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
2b610 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
2b620 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a  ,u8,u8,u8,int);.
2b630 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
2b640 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
2b650 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
2b660 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2b670 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2b680 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
2b690 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
2b6a0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
2b6b0 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
2b6c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b6d0 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
2b6e0 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
2b6f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b700 70 72 52 65 66 65 72 65 6e 63 65 73 55 70 64 61  prReferencesUpda
2b710 74 65 64 43 6f 6c 75 6d 6e 28 45 78 70 72 2a 2c  tedColumn(Expr*,
2b720 69 6e 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  int*,int);.void 
2b730 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
2b740 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
2b750 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2b760 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
2b770 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
2b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b790 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69           u8,u8,i
2b7a0 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 55 70 73  nt,int*,int*,Ups
2b7b0 65 72 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  ert*);.#ifdef SQ
2b7c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c  LITE_ENABLE_NULL
2b7d0 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c  _TRIM.  void sql
2b7e0 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72  ite3SetMakeRecor
2b7f0 64 50 35 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a  dP5(Vdbe*,Table*
2b800 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2b810 65 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65  e sqlite3SetMake
2b820 52 65 63 6f 72 64 50 35 28 41 2c 42 29 0a 23 65  RecordP5(A,B).#e
2b830 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2b840 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69  3CompleteInserti
2b850 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  on(Parse*,Table*
2b860 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
2b870 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  *,int,int,int);.
2b880 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
2b890 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50  ableAndIndices(P
2b8a0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2b8b0 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a  nt, u8, int, u8*
2b8c0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76  , int*, int*);.v
2b8d0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2b8e0 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50  WriteOperation(P
2b8f0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
2b900 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ;.void sqlite3Mu
2b910 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29  ltiWrite(Parse*)
2b920 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
2b930 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a  yAbort(Parse*);.
2b940 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74  void sqlite3Halt
2b950 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
2b960 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61  *, int, int, cha
2b970 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69  r*, i8, u8);.voi
2b980 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43  d sqlite3UniqueC
2b990 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
2b9a0 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a  , int, Index*);.
2b9b0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69  void sqlite3Rowi
2b9c0 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  dConstraint(Pars
2b9d0 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29  e*, int, Table*)
2b9e0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2b9f0 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  xprDup(sqlite3*,
2ba00 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  Expr*,int);.Expr
2ba10 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
2ba20 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  rListDup(sqlite3
2ba30 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  *,ExprList*,int)
2ba40 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
2ba50 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c  e3SrcListDup(sql
2ba60 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69  ite3*,SrcList*,i
2ba70 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  nt);.IdList *sql
2ba80 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71  ite3IdListDup(sq
2ba90 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b  lite3*,IdList*);
2baa0 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
2bab0 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65  SelectDup(sqlite
2bac0 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b  3*,Select*,int);
2bad0 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
2bae0 33 46 75 6e 63 74 69 6f 6e 53 65 61 72 63 68 28  3FunctionSearch(
2baf0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2bb00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
2bb10 73 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73  sertBuiltinFuncs
2bb20 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a  (FuncDef*,int);.
2bb30 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
2bb40 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  FindFunction(sql
2bb50 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
2bb60 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f  *,int,u8,u8);.vo
2bb70 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
2bb80 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  erBuiltinFunctio
2bb90 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
2bba0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61  qlite3RegisterDa
2bbb0 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28  teTimeFunctions(
2bbc0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2bbd0 74 65 33 52 65 67 69 73 74 65 72 50 65 72 43 6f  te3RegisterPerCo
2bbe0 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46  nnectionBuiltinF
2bbf0 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
2bc00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2bc10 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c  afetyCheckOk(sql
2bc20 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2bc30 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69  te3SafetyCheckSi
2bc40 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29  ckOrOk(sqlite3*)
2bc50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68  ;.void sqlite3Ch
2bc60 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65  angeCookie(Parse
2bc70 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  *, int);..#if !d
2bc80 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2bc90 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66  IT_VIEW) && !def
2bca0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2bcb0 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73  _TRIGGER).void s
2bcc0 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a  qlite3Materializ
2bcd0 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61  eView(Parse*, Ta
2bce0 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  ble*, Expr*, Exp
2bcf0 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74  rList*,Expr*,int
2bd00 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
2bd10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2bd20 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71  RIGGER.  void sq
2bd30 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65  lite3BeginTrigge
2bd40 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  r(Parse*, Token*
2bd50 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
2bd60 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  IdList*,SrcList*
2bd70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
2bd90 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  r*,int, int);.  
2bda0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
2bdb0 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  shTrigger(Parse*
2bdc0 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20  , TriggerStep*, 
2bdd0 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20  Token*);.  void 
2bde0 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
2bdf0 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  er(Parse*, SrcLi
2be00 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  st*, int);.  voi
2be10 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
2be20 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20  ggerPtr(Parse*, 
2be30 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69  Trigger*);.  Tri
2be40 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
2be50 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65  ggersExist(Parse
2be60 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c   *, Table*, int,
2be70 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20   ExprList*, int 
2be80 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67  *pMask);.  Trigg
2be90 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
2bea0 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20  erList(Parse *, 
2beb0 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64  Table *);.  void
2bec0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
2bed0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
2bee0 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45  rigger *, int, E
2bef0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54  xprList*, int, T
2bf00 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20  able *,.        
2bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e      int, int, in
2bf30 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2bf40 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
2bf50 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20  Direct(Parse *, 
2bf60 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65  Trigger *, Table
2bf70 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e   *, int, int, in
2bf80 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2bf90 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61  eViewTriggers(Pa
2bfa0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
2bfb0 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  pr*, int, ExprLi
2bfc0 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
2bfd0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
2bfe0 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20  rStep(sqlite3*, 
2bff0 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20  TriggerStep*);. 
2c000 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
2c010 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65  lite3TriggerSele
2c020 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  ctStep(sqlite3*,
2c030 53 65 6c 65 63 74 2a 2c 0a 20 20 20 20 20 20 20  Select*,.       
2c040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c060 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
2c070 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69  st char*);.  Tri
2c080 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
2c090 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74  3TriggerInsertSt
2c0a0 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ep(Parse*,Token*
2c0b0 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20  , IdList*,.     
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0e0 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 2c 55 70     Select*,u8,Up
2c0f0 73 65 72 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  sert*,.         
2c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2c120 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
2c130 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67   char*);.  Trigg
2c140 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
2c150 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70  riggerUpdateStep
2c160 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45  (Parse*,Token*,E
2c170 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
2c180 20 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20   u8,.           
2c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2c1b0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2c1c0 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  har*);.  Trigger
2c1d0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
2c1e0 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 50  ggerDeleteStep(P
2c1f0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  arse*,Token*, Ex
2c200 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pr*,.           
2c210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c220 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2c230 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2c240 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
2c250 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
2c260 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
2c270 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
2c280 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2c290 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
2c2a0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
2c2b0 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
2c2c0 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
2c2d0 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
2c2e0 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
2c2f0 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
2c300 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
2c310 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
2c320 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
2c330 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
2c340 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65  evel : (p)).# de
2c350 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f  fine sqlite3IsTo
2c360 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
2c370 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65  pToplevel==0).#e
2c380 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2c390 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
2c3a0 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23  t(B,C,D,E,F) 0.#
2c3b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
2c3c0 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
2c3d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2c3e0 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
2c3f0 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
2c400 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2c410 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
2c420 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,C).# define sql
2c430 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
2c440 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  er(A,B,C,D,E,F,G
2c450 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73  ,H,I).# define s
2c460 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
2c470 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
2c480 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65  ,D,E,F).# define
2c490 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c   sqlite3TriggerL
2c4a0 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65  ist(X, Y) 0.# de
2c4b0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
2c4c0 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23  eToplevel(p) p.#
2c4d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
2c4e0 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23  sToplevel(p) 1.#
2c4f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
2c500 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c  riggerColmask(A,
2c510 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23  B,C,D,E,F,G) 0.#
2c520 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
2c530 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65  e3JoinType(Parse
2c540 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2c550 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2c560 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f   sqlite3CreateFo
2c570 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
2c580 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
2c590 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  n*, ExprList*, i
2c5a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2c5b0 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79  3DeferForeignKey
2c5c0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
2c5d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c5e0 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
2c5f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
2c600 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45  uthRead(Parse*,E
2c610 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63  xpr*,Schema*,Src
2c620 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
2c630 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
2c640 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
2c650 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2c660 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2c670 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2c680 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
2c690 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
2c6a0 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
2c6b0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
2c6c0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
2c6d0 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
2c6e0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
2c6f0 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a  thReadCol(Parse*
2c700 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2c710 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
2c720 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
2c730 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  ne sqlite3AuthRe
2c740 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65  ad(a,b,c,d).# de
2c750 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
2c760 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
2c770 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
2c780 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2c790 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
2c7a0 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
2c7b0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
2c7c0 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
2c7d0 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
2c7e0 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
2c7f0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
2c800 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
2c810 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
2c820 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
2c830 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e  oid sqlite3FixIn
2c840 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
2c850 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
2c860 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
2c870 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2c880 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
2c890 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
2c8a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
2c8b0 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
2c8c0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
2c8d0 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
2c8e0 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
2c8f0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
2c900 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
2c910 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2c920 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
2c930 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
2c940 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69  TriggerStep*);.i
2c950 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
2c960 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
2c970 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  uble*, int, u8);
2c980 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
2c990 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20  nt32(const char 
2c9a0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
2c9b0 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20  lite3Atoi(const 
2c9c0 63 68 61 72 2a 29 3b 0a 23 69 66 6e 64 65 66 20  char*);.#ifndef 
2c9d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
2c9e0 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  6.int sqlite3Utf
2c9f0 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20  16ByteLen(const 
2ca00 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
2ca10 20 6e 43 68 61 72 29 3b 0a 23 65 6e 64 69 66 0a   nChar);.#endif.
2ca20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
2ca30 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
2ca40 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
2ca50 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  yte);.u32 sqlite
2ca60 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
2ca70 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  u8**);.LogEst sq
2ca80 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29  lite3LogEst(u64)
2ca90 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
2caa0 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74  LogEstAdd(LogEst
2cab0 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65  ,LogEst);.#ifnde
2cac0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2cad0 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73  RTUALTABLE.LogEs
2cae0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46  t sqlite3LogEstF
2caf0 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65  romDouble(double
2cb00 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
2cb10 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2cb20 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
2cb30 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65  TUS) || \.    de
2cb40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2cb50 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
2cb60 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66  T4) || \.    def
2cb70 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58 50 4c  ined(SQLITE_EXPL
2cb80 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f  AIN_ESTIMATED_RO
2cb90 57 53 29 0a 75 36 34 20 73 71 6c 69 74 65 33 4c  WS).u64 sqlite3L
2cba0 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73  ogEstToInt(LogEs
2cbb0 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74  t);.#endif.VList
2cbc0 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64   *sqlite3VListAd
2cbd0 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74  d(sqlite3*,VList
2cbe0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2cbf0 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68  t,int);.const ch
2cc00 61 72 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74  ar *sqlite3VList
2cc10 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a  NumToName(VList*
2cc20 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
2cc30 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d  e3VListNameToNum
2cc40 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  (VList*,const ch
2cc50 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a  ar*,int);../*.**
2cc60 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61   Routines to rea
2cc70 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69  d and write vari
2cc80 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
2cc90 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65  gers.  These use
2cca0 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e  d to.** be defin
2ccb0 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20  ed locally, but 
2ccc0 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76  now we use the v
2ccd0 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69  arint routines i
2cce0 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20  n the util.c.** 
2ccf0 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  file..*/.int sql
2cd00 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e  ite3PutVarint(un
2cd10 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36  signed char*, u6
2cd20 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  4);.u8 sqlite3Ge
2cd30 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e  tVarint(const un
2cd40 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
2cd50 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65  64 *);.u8 sqlite
2cd60 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e  3GetVarint32(con
2cd70 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2cd80 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20   *, u32 *);.int 
2cd90 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
2cda0 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20  (u64 v);../*.** 
2cdb0 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
2cdc0 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20  is for a varint 
2cdd0 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62  to be a single b
2cde0 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f  yte.  They follo
2cdf0 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68  wing.** macros h
2ce00 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e  andle the common
2ce10 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20   case without a 
2ce20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20  procedure call, 
2ce30 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a  but then call.**
2ce40 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66   the procedure f
2ce50 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74  or larger varint
2ce60 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65  s..*/.#define ge
2ce70 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
2ce80 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28  \.  (u8)((*(A)<(
2ce90 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75  u8)0x80)?((B)=(u
2cea0 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74  32)*(A)),1:sqlit
2ceb0 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41  e3GetVarint32((A
2cec0 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a  ),(u32 *)&(B))).
2ced0 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
2cee0 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
2cef0 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33  8)(((u32)(B)<(u3
2cf00 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75  2)0x80)?(*(A)=(u
2cf10 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29  nsigned char)(B)
2cf20 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50  ),1:\.  sqlite3P
2cf30 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29  utVarint((A),(B)
2cf40 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  )).#define getVa
2cf50 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47  rint    sqlite3G
2cf60 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65  etVarint.#define
2cf70 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71   putVarint    sq
2cf80 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a  lite3PutVarint..
2cf90 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2cfa0 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
2cfb0 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49  yStr(sqlite3*, I
2cfc0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2cfd0 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74  ite3TableAffinit
2cfe0 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  y(Vdbe*, Table*,
2cff0 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69   int);.char sqli
2d000 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69  te3CompareAffini
2d010 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  ty(Expr *pExpr, 
2d020 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20  char aff2);.int 
2d030 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
2d040 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78  nityOk(Expr *pEx
2d050 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66  pr, char idx_aff
2d060 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c  inity);.char sql
2d070 69 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41  ite3TableColumnA
2d080 66 66 69 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69  ffinity(Table*,i
2d090 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  nt);.char sqlite
2d0a0 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
2d0b0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
2d0c0 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
2d0d0 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
2d0e0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
2d0f0 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
2d100 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  I64(const char*,
2d110 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   i64*);.void sql
2d120 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
2d130 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2d140 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
2d150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
2d160 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
2d170 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2d180 79 73 74 65 6d 45 72 72 6f 72 28 73 71 6c 69 74  ystemError(sqlit
2d190 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  e3*,int);.void *
2d1a0 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62  sqlite3HexToBlob
2d1b0 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
2d1c0 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
2d1d0 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54  ;.u8 sqlite3HexT
2d1e0 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74  oInt(int h);.int
2d1f0 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
2d200 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  ame(Parse *, Tok
2d210 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  en *, Token *, T
2d220 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64  oken **);..#if d
2d230 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45  efined(SQLITE_NE
2d240 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e  ED_ERR_NAME).con
2d250 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2d260 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65  ErrName(int);.#e
2d270 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2d280 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52  ITE_ENABLE_DESER
2d290 49 41 4c 49 5a 45 0a 69 6e 74 20 73 71 6c 69 74  IALIZE.int sqlit
2d2a0 65 33 4d 65 6d 64 62 49 6e 69 74 28 76 6f 69 64  e3MemdbInit(void
2d2b0 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74  );.#endif..const
2d2c0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
2d2d0 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rStr(int);.int s
2d2e0 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
2d2f0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
2d300 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2d310 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c  3FindCollSeq(sql
2d320 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f  ite3*,u8 enc, co
2d330 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2d340 69 6e 74 20 73 71 6c 69 74 65 33 49 73 42 69 6e  int sqlite3IsBin
2d350 61 72 79 28 63 6f 6e 73 74 20 43 6f 6c 6c 53 65  ary(const CollSe
2d360 71 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  q*);.CollSeq *sq
2d370 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53  lite3LocateCollS
2d380 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2d390 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61  , const char*zNa
2d3a0 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  me);.CollSeq *sq
2d3b0 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
2d3c0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2d3d0 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 43 6f  Expr *pExpr);.Co
2d3e0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
2d3f0 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50 61 72 73  prNNCollSeq(Pars
2d400 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2d410 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
2d420 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 4d  ite3ExprCollSeqM
2d430 61 74 63 68 28 50 61 72 73 65 2a 2c 45 78 70 72  atch(Parse*,Expr
2d440 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  *,Expr*);.Expr *
2d450 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
2d460 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65  llateToken(Parse
2d470 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c   *pParse, Expr*,
2d480 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69   const Token*, i
2d490 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2d4a0 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
2d4b0 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78  String(Parse*,Ex
2d4c0 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  pr*,const char*)
2d4d0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2d4e0 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45  xprSkipCollate(E
2d4f0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2d500 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
2d510 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
2d520 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2d530 72 69 74 61 62 6c 65 53 63 68 65 6d 61 28 73 71  ritableSchema(sq
2d540 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2d550 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e  ite3CheckObjectN
2d560 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e  ame(Parse *, con
2d570 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64  st char *);.void
2d580 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
2d590 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a  hanges(sqlite3 *
2d5a0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2d5b0 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a  te3AddInt64(i64*
2d5c0 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
2d5d0 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c  e3SubInt64(i64*,
2d5e0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
2d5f0 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69  3MulInt64(i64*,i
2d600 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2d610 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23  AbsInt32(int);.#
2d620 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2d630 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f  BLE_8_3_NAMES.vo
2d640 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  id sqlite3FileSu
2d650 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72  ffix3(const char
2d660 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  *, char*);.#else
2d670 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2d680 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59  3FileSuffix3(X,Y
2d690 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69  ).#endif.u8 sqli
2d6a0 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f  te3GetBoolean(co
2d6b0 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b  nst char *z,u8);
2d6c0 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
2d6d0 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
2d6e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
2d6f0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
2d700 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65  alueBytes(sqlite
2d710 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76  3_value*, u8);.v
2d720 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2d730 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76  SetStr(sqlite3_v
2d740 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  alue*, int, cons
2d750 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20  t void *,u8,.   
2d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d770 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
2d780 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
2d790 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73  e3ValueSetNull(s
2d7a0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
2d7b0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2d7c0 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
2d7d0 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76  lue*);.sqlite3_v
2d7e0 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
2d7f0 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29  ueNew(sqlite3 *)
2d800 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2d810 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 68 61 72  _OMIT_UTF16.char
2d820 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f   *sqlite3Utf16to
2d830 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  8(sqlite3 *, con
2d840 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75  st void*, int, u
2d850 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  8);.#endif.int s
2d860 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45  qlite3ValueFromE
2d870 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45  xpr(sqlite3 *, E
2d880 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73  xpr *, u8, u8, s
2d890 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
2d8a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2d8b0 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
2d8c0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
2d8d0 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64  , u8, u8);.#ifnd
2d8e0 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
2d8f0 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f  MATION.extern co
2d900 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2d910 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  r sqlite3OpcodeP
2d920 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72  roperty[];.exter
2d930 6e 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c  n const char sql
2d940 69 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b  ite3StrBINARY[];
2d950 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
2d960 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
2d970 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
2d980 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
2d990 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2d9a0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b  lite3CtypeMap[];
2d9b0 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f  .extern const To
2d9c0 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f  ken sqlite3IntTo
2d9d0 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53  kens[];.extern S
2d9e0 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74  QLITE_WSD struct
2d9f0 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73   Sqlite3Config s
2da00 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78  qlite3Config;.ex
2da10 74 65 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68  tern FuncDefHash
2da20 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46   sqlite3BuiltinF
2da30 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65  unctions;.#ifnde
2da40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
2da50 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  D.extern int sql
2da60 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b  ite3PendingByte;
2da70 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  .#endif.#endif.#
2da80 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
2da90 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c 69 74 65  LE.extern sqlite
2daa0 33 5f 75 69 6e 74 36 34 20 73 71 6c 69 74 65 33  3_uint64 sqlite3
2dab0 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a 23 65 6e  NProfileCnt;.#en
2dac0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2dad0 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71  RootPageMoved(sq
2dae0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
2daf0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2db00 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73  ite3Reindex(Pars
2db10 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2db20 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2db30 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28  3AlterFunctions(
2db40 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2db50 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61  te3AlterRenameTa
2db60 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
2db70 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
2db80 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2db90 52 65 6e 61 6d 65 43 6f 6c 75 6d 6e 28 50 61 72  RenameColumn(Par
2dba0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
2dbb0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
2dbc0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
2dbd0 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
2dbe0 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
2dbf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
2dc00 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
2dc10 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2dc20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
2dc30 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
2dc40 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
2dc50 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  e3*, int);.void 
2dc60 73 71 6c 69 74 65 33 43 6f 64 65 52 68 73 4f 66  sqlite3CodeRhsOf
2dc70 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  IN(Parse*, Expr*
2dc80 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
2dc90 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
2dca0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78  elect(Parse*, Ex
2dcb0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2dcc0 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
2dcd0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
2dce0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
2dcf0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
2dd00 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f  rongNumTermsErro
2dd10 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  r(Parse *pParse,
2dd20 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74   Select *p);.int
2dd30 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
2dd40 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
2dd50 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2dd60 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2dd70 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
2dd80 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
2dd90 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
2dda0 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  xt*, Expr*);.int
2ddb0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2ddc0 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d  xprListNames(Nam
2ddd0 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c  eContext*, ExprL
2dde0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
2ddf0 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74  te3ResolveSelect
2de00 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65  Names(Parse*, Se
2de10 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2de20 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
2de30 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65  3ResolveSelfRefe
2de40 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62  rence(Parse*,Tab
2de50 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78  le*,int,Expr*,Ex
2de60 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
2de70 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
2de80 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
2de90 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
2dea0 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
2deb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2dec0 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
2ded0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
2dee0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2def0 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
2df00 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
2df10 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
2df20 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
2df30 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
2df40 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
2df50 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
2df60 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70 28 50 61  enameTokenMap(Pa
2df70 72 73 65 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f 6b  rse*, void*, Tok
2df80 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2df90 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 52 65 6d  e3RenameTokenRem
2dfa0 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64 20  ap(Parse*, void 
2dfb0 2a 70 54 6f 2c 20 76 6f 69 64 20 2a 70 46 72 6f  *pTo, void *pFro
2dfc0 6d 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  m);.void sqlite3
2dfd0 52 65 6e 61 6d 65 45 78 70 72 55 6e 6d 61 70 28  RenameExprUnmap(
2dfe0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2dff0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61  void sqlite3Rena
2e000 6d 65 45 78 70 72 6c 69 73 74 55 6e 6d 61 70 28  meExprlistUnmap(
2e010 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2e020 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
2e030 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50  ite3GetCollSeq(P
2e040 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53  arse*, u8, CollS
2e050 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  eq *, const char
2e060 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
2e070 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e  AffinityType(con
2e080 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e  st char*, Column
2e090 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e0a0 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
2e0b0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2e0c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
2e0d0 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
2e0e0 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69  syHandler*, sqli
2e0f0 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20  te3_file*);.int 
2e100 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71  sqlite3FindDb(sq
2e110 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
2e120 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2e130 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a  DbName(sqlite3 *
2e140 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2e150 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c  .int sqlite3Anal
2e160 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33  ysisLoad(sqlite3
2e170 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64  *,int iDB);.void
2e180 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e   sqlite3DeleteIn
2e190 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74  dexSamples(sqlit
2e1a0 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  e3*,Index*);.voi
2e1b0 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74  d sqlite3Default
2e1c0 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a  RowEst(Index*);.
2e1d0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
2e1e0 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
2e1f0 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
2e200 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c  ;.int sqlite3IsL
2e210 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  ikeFunction(sqli
2e220 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c  te3*,Expr*,int*,
2e230 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2e240 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28  ite3SchemaClear(
2e250 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20  void *);.Schema 
2e260 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65  *sqlite3SchemaGe
2e270 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72  t(sqlite3 *, Btr
2e280 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ee *);.int sqlit
2e290 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28  e3SchemaToIndex(
2e2a0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68  sqlite3 *db, Sch
2e2b0 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  ema *);.KeyInfo 
2e2c0 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41  *sqlite3KeyInfoA
2e2d0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
2e2e0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
2e2f0 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66  ite3KeyInfoUnref
2e300 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
2e310 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2e320 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29  nfoRef(KeyInfo*)
2e330 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2e340 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78  e3KeyInfoOfIndex
2e350 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29  (Parse*, Index*)
2e360 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2e370 65 33 4b 65 79 49 6e 66 6f 46 72 6f 6d 45 78 70  e3KeyInfoFromExp
2e380 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
2e390 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
2e3a0 74 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  t);..#ifdef SQLI
2e3b0 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
2e3c0 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
2e3d0 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
2e3e0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2e3f0 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
2e400 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2e410 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
2e420 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64  , void *,.  void
2e430 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2e440 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2e450 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
2e460 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2e470 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2e480 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
2e490 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2e4a0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
2e4b0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2e4c0 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76  3_context*),.  v
2e4d0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2e4e0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2e4f0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
2e500 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
2e510 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
2e520 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f  ;.void sqlite3No
2e530 6f 70 44 65 73 74 72 75 63 74 6f 72 28 76 6f 69  opDestructor(voi
2e540 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
2e550 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65  3OomFault(sqlite
2e560 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
2e570 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65  3OomClear(sqlite
2e580 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2e590 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20  ApiExit(sqlite3 
2e5a0 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  *db, int);.int s
2e5b0 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61  qlite3OpenTempDa
2e5c0 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b  tabase(Parse *);
2e5d0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ..void sqlite3St
2e5e0 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63  rAccumInit(StrAc
2e5f0 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  cum*, sqlite3*, 
2e600 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  char*, int, int)
2e610 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  ;.char *sqlite3S
2e620 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74  trAccumFinish(St
2e630 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
2e640 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74  qlite3SelectDest
2e650 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a  Init(SelectDest*
2e660 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ,int,int);.Expr 
2e670 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f  *sqlite3CreateCo
2e680 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33  lumnExpr(sqlite3
2e690 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69   *, SrcList *, i
2e6a0 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20  nt, int);..void 
2e6b0 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73  sqlite3BackupRes
2e6c0 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63  tart(sqlite3_bac
2e6d0 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  kup *);.void sql
2e6e0 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65  ite3BackupUpdate
2e6f0 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
2e700 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75  *, Pgno, const u
2e710 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  8 *);..#ifndef S
2e720 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
2e730 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  ERY.int sqlite3E
2e740 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73 65  xprCheckIN(Parse
2e750 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65  *, Expr*);.#else
2e760 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2e770 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c 79  3ExprCheckIN(x,y
2e780 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64  ) SQLITE_OK.#end
2e790 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2e7a0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
2e7b0 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c  R_STAT4.void sql
2e7c0 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74  ite3AnalyzeFunct
2e7d0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
2e7e0 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
2e7f0 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20 20 50  eSetValue(.    P
2e800 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70  arse*,Index*,Unp
2e810 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78  ackedRecord**,Ex
2e820 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  pr*,int,int,int*
2e830 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2e840 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
2e850 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2e860 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
2e870 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
2e880 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
2e890 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
2e8a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2e8b0 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
2e8c0 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
2e8d0 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
2e8e0 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61  e3_value**);.cha
2e8f0 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78 43 6f  r sqlite3IndexCo
2e900 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 71 6c  lumnAffinity(sql
2e910 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  ite3*, Index*, i
2e920 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nt);.#endif../*.
2e930 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
2e940 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65   to the LEMON-ge
2e950 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a  nerated parser.*
2e960 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2e970 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
2e980 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72  void *sqlite3Par
2e990 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a  serAlloc(void*(*
2e9a0 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a 29 3b  )(u64), Parse*);
2e9b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
2e9c0 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
2e9d0 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
2e9e0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2e9f0 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
2ea00 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a  *, int, Token);.
2ea10 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2ea20 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74 29 3b 0a  rFallback(int);.
2ea30 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
2ea40 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e  XSTACKDEPTH.  in
2ea50 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53  t sqlite3ParserS
2ea60 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b  tackPeak(void*);
2ea70 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
2ea80 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74  lite3AutoLoadExt
2ea90 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
2eaa0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2eab0 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
2eac0 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  NSION.  void sql
2ead0 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
2eae0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
2eaf0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2eb00 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
2eb10 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ions(X).#endif..
2eb20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2eb30 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
2eb40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
2eb50 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a  ableLock(Parse *
2eb60 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20  , int, int, u8, 
2eb70 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23  const char *);.#
2eb80 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2eb90 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
2eba0 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69  v,w,x,y,z).#endi
2ebb0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2ebc0 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69  _TEST.  int sqli
2ebd0 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67  te3Utf8To8(unsig
2ebe0 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  ned char*);.#end
2ebf0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2ec00 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2ec10 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71  BLE.#  define sq
2ec20 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59  lite3VtabClear(Y
2ec30 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2ec40 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29  te3VtabSync(X,Y)
2ec50 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
2ec60 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2ec70 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64  Rollback(X).#  d
2ec80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2ec90 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65  bCommit(X).#  de
2eca0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2ecb0 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20  InSync(db) 0.#  
2ecc0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2ecd0 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  abLock(X).#  def
2ece0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
2ecf0 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69  nlock(X).#  defi
2ed00 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
2ed10 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64  lockList(X).#  d
2ed20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2ed30 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c  bSavepoint(X, Y,
2ed40 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20   Z) SQLITE_OK.# 
2ed50 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47   define sqlite3G
2ed60 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28  etVTable(X,Y)  (
2ed70 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73  (VTable*)0).#els
2ed80 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  e.   void sqlite
2ed90 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74  3VtabClear(sqlit
2eda0 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b  e3 *db, Table*);
2edb0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2edc0 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73  VtabDisconnect(s
2edd0 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
2ede0 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71  e *p);.   int sq
2edf0 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71  lite3VtabSync(sq
2ee00 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a  lite3 *db, Vdbe*
2ee10 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2ee20 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
2ee30 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
2ee40 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
2ee50 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
2ee60 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2ee70 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
2ee80 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
2ee90 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
2eea0 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
2eeb0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
2eec0 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33  lockList(sqlite3
2eed0 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
2eee0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
2eef0 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
2ef00 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  int);.   void sq
2ef10 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
2ef20 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c  rrmsg(Vdbe*, sql
2ef30 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20  ite3_vtab*);.   
2ef40 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47  VTable *sqlite3G
2ef50 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33  etVTable(sqlite3
2ef60 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 4d  *, Table*);.   M
2ef70 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 56 74  odule *sqlite3Vt
2ef80 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 0a  abCreateModule(.
2ef90 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a 20       sqlite3*,. 
2efa0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2efb0 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71 6c 69  .     const sqli
2efc0 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20  te3_module*,.   
2efd0 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76 6f    void*,.     vo
2efe0 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20 20  id(*)(void*).   
2eff0 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  );.#  define sql
2f000 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
2f010 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e  b) ((db)->nVTran
2f020 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54  s>0 && (db)->aVT
2f030 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  rans==0).#endif.
2f040 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 45  int sqlite3VtabE
2f050 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69  ponymousTableIni
2f060 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a  t(Parse*,Module*
2f070 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2f080 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c  tabEponymousTabl
2f090 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c  eClear(sqlite3*,
2f0a0 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
2f0b0 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72  qlite3VtabMakeWr
2f0c0 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61  itable(Parse*,Ta
2f0d0 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ble*);.void sqli
2f0e0 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73  te3VtabBeginPars
2f0f0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2f100 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2f110 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2f120 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50 61  ite3VtabFinishPa
2f130 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
2f140 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2f150 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61 72  3VtabArgInit(Par
2f160 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
2f170 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64 28  e3VtabArgExtend(
2f180 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
2f190 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2f1a0 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74  CallCreate(sqlit
2f1b0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
2f1c0 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29  char *, char **)
2f1d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2f1e0 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72  bCallConnect(Par
2f1f0 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e  se*, Table*);.in
2f200 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2f210 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33  lDestroy(sqlite3
2f220 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
2f230 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
2f240 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69  e3VtabBegin(sqli
2f250 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29  te3 *, VTable *)
2f260 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
2f270 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75  e3VtabOverloadFu
2f280 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a  nction(sqlite3 *
2f290 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e  ,FuncDef*, int n
2f2a0 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 73 71 6c  Arg, Expr*);.sql
2f2b0 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
2f2c0 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d  e3StmtCurrentTim
2f2d0 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e(sqlite3_contex
2f2e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2f2f0 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64  VdbeParameterInd
2f300 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ex(Vdbe*, const 
2f310 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
2f320 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72   sqlite3Transfer
2f330 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  Bindings(sqlite3
2f340 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33  _stmt *, sqlite3
2f350 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73  _stmt *);.void s
2f360 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65  qlite3ParserRese
2f370 74 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  t(Parse*);.#ifde
2f380 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2f390 4e 4f 52 4d 41 4c 49 5a 45 0a 63 68 61 72 20 2a  NORMALIZE.char *
2f3a0 73 71 6c 69 74 65 33 4e 6f 72 6d 61 6c 69 7a 65  sqlite3Normalize
2f3b0 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
2f3c0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  ar*);.#endif.int
2f3d0 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72   sqlite3Reprepar
2f3e0 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73  e(Vdbe*);.void s
2f3f0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68  qlite3ExprListCh
2f400 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a  eckLength(Parse*
2f410 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
2f420 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53  st char*);.CollS
2f430 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72  eq *sqlite3Binar
2f440 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28  yCompareCollSeq(
2f450 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
2f460 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71   Expr *);.int sq
2f470 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72  lite3TempInMemor
2f480 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a  y(const sqlite3*
2f490 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
2f4a0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
2f4b0 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e  ename(int);.#ifn
2f4c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f4d0 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  WAL.  int sqlite
2f4e0 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69  3Checkpoint(sqli
2f4f0 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
2f500 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69  int*, int*);.  i
2f510 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66  nt sqlite3WalDef
2f520 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73  aultHook(void*,s
2f530 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
2f540 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ar*,int);.#endif
2f550 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f560 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20  OMIT_CTE.  With 
2f570 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64 64 28  *sqlite3WithAdd(
2f580 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b  Parse*,With*,Tok
2f590 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65  en*,ExprList*,Se
2f5a0 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  lect*);.  void s
2f5b0 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65  qlite3WithDelete
2f5c0 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29  (sqlite3*,With*)
2f5d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2f5e0 57 69 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c  WithPush(Parse*,
2f5f0 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c   With*, u8);.#el
2f600 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  se.#define sqlit
2f610 65 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a  e3WithPush(x,y,z
2f620 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
2f630 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29  3WithDelete(x,y)
2f640 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
2f650 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 50 53 45  SQLITE_OMIT_UPSE
2f660 52 54 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c  RT.  Upsert *sql
2f670 69 74 65 33 55 70 73 65 72 74 4e 65 77 28 73 71  ite3UpsertNew(sq
2f680 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
2f690 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
2f6a0 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20  ,Expr*);.  void 
2f6b0 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65 6c  sqlite3UpsertDel
2f6c0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 55 70 73  ete(sqlite3*,Ups
2f6d0 65 72 74 2a 29 3b 0a 20 20 55 70 73 65 72 74 20  ert*);.  Upsert 
2f6e0 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 75  *sqlite3UpsertDu
2f6f0 70 28 73 71 6c 69 74 65 33 2a 2c 55 70 73 65 72  p(sqlite3*,Upser
2f700 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2f710 65 33 55 70 73 65 72 74 41 6e 61 6c 79 7a 65 54  e3UpsertAnalyzeT
2f720 61 72 67 65 74 28 50 61 72 73 65 2a 2c 53 72 63  arget(Parse*,Src
2f730 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  List*,Upsert*);.
2f740 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70    void sqlite3Up
2f750 73 65 72 74 44 6f 55 70 64 61 74 65 28 50 61 72  sertDoUpdate(Par
2f760 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54 61 62 6c  se*,Upsert*,Tabl
2f770 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  e*,Index*,int);.
2f780 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71  #else.#define sq
2f790 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28 76  lite3UpsertNew(v
2f7a0 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55 70 73 65  ,w,x,y,z) ((Upse
2f7b0 72 74 2a 29 30 29 0a 23 64 65 66 69 6e 65 20 73  rt*)0).#define s
2f7c0 71 6c 69 74 65 33 55 70 73 65 72 74 44 65 6c 65  qlite3UpsertDele
2f7d0 74 65 28 78 2c 79 29 0a 23 64 65 66 69 6e 65 20  te(x,y).#define 
2f7e0 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 75 70  sqlite3UpsertDup
2f7f0 28 78 2c 79 29 20 20 20 20 20 20 20 28 28 55 70  (x,y)       ((Up
2f800 73 65 72 74 2a 29 30 29 0a 23 65 6e 64 69 66 0a  sert*)0).#endif.
2f810 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
2f820 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
2f830 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
2f840 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
2f850 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
2f860 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
2f870 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
2f880 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
2f890 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
2f8a0 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
2f8b0 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
2f8c0 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
2f8d0 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
2f8e0 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
2f8f0 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
2f900 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
2f910 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
2f920 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
2f930 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
2f940 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
2f950 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
2f960 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20  tionality is.** 
2f970 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63  provided (enforc
2f980 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73  ement of FK cons
2f990 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73  traints requires
2f9a0 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75   the triggers su
2f9b0 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69  b-system)..*/.#i
2f9c0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2f9d0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2f9e0 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
2f9f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2fa00 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  GER).  void sqli
2fa10 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65  te3FkCheck(Parse
2fa20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2fa30 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
2fa40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2fa50 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  kDropTable(Parse
2fa60 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61  *, SrcList *, Ta
2fa70 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ble*);.  void sq
2fa80 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50  lite3FkActions(P
2fa90 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
2faa0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
2fab0 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  nt*, int);.  int
2fac0 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
2fad0 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ed(Parse*, Table
2fae0 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  *, int*, int);. 
2faf0 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c   u32 sqlite3FkOl
2fb00 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61  dmask(Parse*, Ta
2fb10 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73  ble*);.  FKey *s
2fb20 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63  qlite3FkReferenc
2fb30 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c  es(Table *);.#el
2fb40 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2fb50 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c  ite3FkActions(a,
2fb60 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
2fb70 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68  fine sqlite3FkCh
2fb80 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  eck(a,b,c,d,e,f)
2fb90 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2fba0 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c  e3FkDropTable(a,
2fbb0 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73  b,c).  #define s
2fbc0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
2fbd0 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20  a,b)         0. 
2fbe0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2fbf0 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
2fc00 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65 66 69  ,d)    0.  #defi
2fc10 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 66 65  ne sqlite3FkRefe
2fc20 72 65 6e 63 65 73 28 61 29 20 20 20 20 20 20 20  rences(a)       
2fc30 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
2fc40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2fc50 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
2fc60 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
2fc70 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
2fc80 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
2fc90 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
2fca0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
2fcb0 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
2fcc0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
2fcd0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
2fce0 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
2fcf0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
2fd00 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
2fd10 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
2fd20 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
2fd30 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
2fd40 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
2fd50 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2fd60 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
2fd70 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
2fd80 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
2fd90 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
2fda0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
2fdb0 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
2fdc0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
2fdd0 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
2fde0 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
2fdf0 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
2fe00 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
2fe10 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
2fe20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
2fe30 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2fe40 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  E.** is not defi
2fe50 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
2fe60 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2fe70 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
2fe80 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2fe90 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
2fea0 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
2feb0 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
2fec0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2fed0 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
2fee0 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
2fef0 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
2ff00 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
2ff10 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  if../*.** Allowe
2ff20 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
2ff30 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64  from sqlite3Find
2ff40 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65  InIndex().*/.#de
2ff50 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f  fine IN_INDEX_RO
2ff60 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f  WID        1   /
2ff70 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77  * Search the row
2ff80 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
2ff90 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2ffa0 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20  DEX_EPH         
2ffb0 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61   2   /* Search a
2ffc0 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72  n ephemeral b-tr
2ffd0 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ee */.#define IN
2ffe0 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43  _INDEX_INDEX_ASC
2fff0 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74      3   /* Exist
30000 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44  ing index ASCEND
30010 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
30020 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45  N_INDEX_INDEX_DE
30030 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73  SC   4   /* Exis
30040 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45  ting index DESCE
30050 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
30060 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20   IN_INDEX_NOOP  
30070 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f         5   /* No
30080 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65   table available
30090 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e  . Use comparison
300a0 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  s */./*.** Allow
300b0 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  ed flags for the
300c0 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74   3rd parameter t
300d0 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  o sqlite3FindInI
300e0 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  ndex()..*/.#defi
300f0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
30100 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20  _OK     0x0001  
30110 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20  /* OK to return 
30120 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f  IN_INDEX_NOOP */
30130 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
30140 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78  X_MEMBERSHIP  0x
30150 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0002  /* IN oper
30160 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65  ator used for me
30170 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f  mbership test */
30180 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
30190 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78  X_LOOP        0x
301a0 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0004  /* IN oper
301b0 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c  ator used as a l
301c0 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  oop */.int sqlit
301d0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
301e0 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  rse *, Expr *, u
301f0 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 2c 20  32, int*, int*, 
30200 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69  int*);..int sqli
30210 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
30220 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
30230 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
30240 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
30250 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
30260 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71  e3JournalSize(sq
30270 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69  lite3_vfs *);.#i
30280 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
30290 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57  _ENABLE_ATOMIC_W
302a0 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65 66 69  RITE) \. || defi
302b0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
302c0 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57  E_BATCH_ATOMIC_W
302d0 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  RITE).  int sqli
302e0 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
302f0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
30300 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
30310 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e  lite3JournalIsIn
30320 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66  Memory(sqlite3_f
30330 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  ile *p);.void sq
30340 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
30350 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
30360 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
30370 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 41  e3ExprSetHeightA
30380 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70  ndFlags(Parse *p
30390 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
303a0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
303b0 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
303c0 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
303d0 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63  ExprHeight(Selec
303e0 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  t *);.  int sqli
303f0 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
30400 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ht(Parse*, int);
30410 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
30420 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
30430 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
30440 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
30450 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
30460 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
30470 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
30480 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
30490 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
304a0 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
304b0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
304c0 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
304d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
304e0 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
304f0 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
30500 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
30510 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
30520 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
30530 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
30540 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
30550 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
30560 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
30570 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
30580 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
30590 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
305a0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
305b0 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
305c0 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
305d0 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
305e0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
305f0 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
30600 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
30610 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
30620 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
30630 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41 47 45  fined(YYCOVERAGE
30640 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ).  int sqlite3P
30650 61 72 73 65 72 43 6f 76 65 72 61 67 65 28 46 49  arserCoverage(FI
30660 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LE*);.#endif../*
30670 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
30680 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
30690 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
306a0 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
306b0 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
306c0 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
306d0 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
306e0 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
306f0 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
30700 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 0a  acing messages..
30710 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
30720 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a  _ENABLE_IOTRACE.
30730 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
30740 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33  (A)  if( sqlite3
30750 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74  IoTrace ){ sqlit
30760 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20  e3IoTrace A; }. 
30770 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62   void sqlite3Vdb
30780 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65  eIOTraceSql(Vdbe
30790 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53  *);.SQLITE_API S
307a0 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69  QLITE_EXTERN voi
307b0 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20  d (SQLITE_CDECL 
307c0 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
307d0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
307e0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
307f0 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
30800 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
30810 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
30820 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
30830 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
30840 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
30850 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
30860 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
30870 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
30880 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
30890 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
308a0 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
308b0 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
308c0 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
308d0 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
308e0 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
308f0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
30900 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
30910 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
30920 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
30930 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
30940 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
30950 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
30960 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
30970 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
30980 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
30990 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
309a0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
309b0 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
309c0 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
309d0 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
309e0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
309f0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
30a00 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
30a10 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
30a20 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
30a30 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
30a40 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
30a50 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
30a60 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
30a70 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
30a80 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
30a90 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
30aa0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
30ab0 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
30ac0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
30ad0 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
30ae0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
30af0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
30b00 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
30b10 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
30b20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
30b30 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
30b40 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
30b50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
30b60 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
30b70 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
30b80 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
30b90 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
30ba0 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
30bb0 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
30bc0 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
30bd0 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
30be0 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
30bf0 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
30c00 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
30c10 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
30c20 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
30c30 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
30c40 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
30c50 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
30c60 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
30c70 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
30c80 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
30c90 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
30ca0 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
30cb0 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
30cc0 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
30cd0 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
30ce0 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
30cf0 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
30d00 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
30d10 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a  his constraint..
30d20 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69  **.** All of thi
30d30 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61  s is no-op for a
30d40 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c   production buil
30d50 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65  d.  It only come
30d60 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77  s into.** play w
30d70 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  hen the SQLITE_M
30d80 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d  EMDEBUG compile-
30d90 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
30da0 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  sed..*/.#ifdef S
30db0 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
30dc0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
30dd0 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69  debugSetType(voi
30de0 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
30df0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
30e00 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
30e10 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
30e20 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64  debugNoType(void
30e30 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64  *,u8);.#else.# d
30e40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
30e50 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59  debugSetType(X,Y
30e60 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  )  /* no-op */.#
30e70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
30e80 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58  emdebugHasType(X
30e90 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20  ,Y)  1.# define 
30ea0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
30eb0 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23  oType(X,Y)   1.#
30ec0 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45  endif.#define ME
30ed0 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20  MTYPE_HEAP      
30ee0 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61   0x01  /* Genera
30ef0 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f  l heap allocatio
30f00 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
30f10 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20  MTYPE_LOOKASIDE 
30f20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74   0x02  /* Heap t
30f30 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
30f40 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f  een lookaside */
30f50 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
30f60 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30 34  _PCACHE     0x04
30f70 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
30f80 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a  allocations */..
30f90 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20  /*.** Threading 
30fa0 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66  interface.*/.#if
30fb0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
30fc0 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74  ER_THREADS>0.int
30fd0 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43 72   sqlite3ThreadCr
30fe0 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65 61  eate(SQLiteThrea
30ff0 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69  d**,void*(*)(voi
31000 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  d*),void*);.int 
31010 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69  sqlite3ThreadJoi
31020 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c  n(SQLiteThread*,
31030 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66   void**);.#endif
31040 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
31050 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 50 41  LITE_ENABLE_DBPA
31060 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69  GE_VTAB) || defi
31070 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
31080 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 70 61  .int sqlite3Dbpa
31090 67 65 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  geRegister(sqlit
310a0 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  e3*);.#endif.#if
310b0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
310c0 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54  ENABLE_DBSTAT_VT
310d0 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  AB) || defined(S
310e0 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20  QLITE_TEST).int 
310f0 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65 67  sqlite3DbstatReg
31100 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b  ister(sqlite3*);
31110 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
31120 69 74 65 33 45 78 70 72 56 65 63 74 6f 72 53 69  ite3ExprVectorSi
31130 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ze(Expr *pExpr);
31140 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
31150 49 73 56 65 63 74 6f 72 28 45 78 70 72 20 2a 70  IsVector(Expr *p
31160 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
31170 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64 53  ite3VectorFieldS
31180 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20 69 6e  ubexpr(Expr*, in
31190 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
311a0 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72 46 69  3ExprForVectorFi
311b0 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  eld(Parse*,Expr*
311c0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
311d0 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72 4d 73  te3VectorErrorMs
311e0 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  g(Parse*, Expr*)
311f0 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
31200 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
31210 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73 74  TION_DIAGS.const
31220 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65 33 43   char **sqlite3C
31230 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69 6e  ompileOptions(in
31240 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64 69  t *pnOpt);.#endi
31250 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  f..#endif /* SQL
31260 49 54 45 49 4e 54 5f 48 20 2a 2f 0a              ITEINT_H */.