/ Hex Artifact Content
Login

Artifact 59b625f88bf96cad4cd1a6a6ded615c161f518fb56da3e49f2ff70429e49095f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
6dd0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
6de0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
6df0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
6e00: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
6e10: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
6e20: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
6e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
6e40: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6e50: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
6e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
6e70: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
6e80: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
6e90: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ea0: 5f 5f 61 72 6d 5f 5f 29 20 20 7c 7c 20 64 65 66  __arm__)  || def
6eb0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 36 34 29 0a 23  ined(_M_ARM64).#
6ec0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ed0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
6ee0: 33 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65  34.# elif define
6ef0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
6f00: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a  efined(__ppc__).
6f10: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6f20: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6f30: 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  321.# else.#   d
6f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6f50: 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66  EORDER 0.# endif
6f60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
6f70: 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33  TE_BYTEORDER==43
6f80: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
6f90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6fa0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6fb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
6fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6fd0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
6fe0: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c  LITE_UTF16BE.#el
6ff0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
7000: 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69  DER==1234.# defi
7010: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
7020: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
7030: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7040: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
7050: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7060: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
7070: 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65  6LE.#else.# ifde
7080: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
7090: 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e  ATION.  const in
70a0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31  t sqlite3one = 1
70b0: 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72  ;.# else.  exter
70c0: 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  n const int sqli
70d0: 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a  te3one;.# endif.
70e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70f0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
7100: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
7110: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
7120: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7130: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
7140: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
7150: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
7160: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
7170: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
7180: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
7190: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
71a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
71b0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
71c0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
71d0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
71e0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
71f0: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
7200: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
7210: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
7220: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
7230: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
7240: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
7250: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
7260: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
7270: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
7280: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
7290: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
72a0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
72b0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
72c0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61  /*.** Round up a
72d0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e   number to the n
72e0: 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69  ext larger multi
72f0: 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20  ple of 8.  This 
7300: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f  is used.** to fo
7310: 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e  rce 8-byte align
7320: 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61  ment on 64-bit a
7330: 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f  rchitectures..*/
7340: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28  .#define ROUND8(
7350: 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26  x)     (((x)+7)&
7360: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  ~7)../*.** Round
7370: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61   down to the nea
7380: 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rest multiple of
7390: 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f   8.*/.#define RO
73a0: 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29  UNDDOWN8(x) ((x)
73b0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65  &~7)../*.** Asse
73c0: 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e  rt that the poin
73d0: 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64  ter X is aligned
73e0: 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   to an 8-byte bo
73f0: 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a  undary.  This.**
7400: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f   macro is used o
7410: 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72  nly within asser
7420: 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68  t() to verify th
7430: 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73  at the code gets
7440: 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e  .** all alignmen
7450: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63  t restrictions c
7460: 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78  orrect..**.** Ex
7470: 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f  cept, if SQLITE_
7480: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
7490: 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64  ALLOC is defined
74a0: 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e  , then the.** un
74b0: 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28  derlying malloc(
74c0: 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ) implementation
74d0: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
74e0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
74f0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
7500: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
7510: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
7520: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
7530: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
7540: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
7550: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
7560: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
7570: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
7580: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
7590: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
75a0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
75b0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
75c0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
75d0: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
75e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
75f0: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
7600: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
7610: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
7620: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
7630: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
7640: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
7650: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
7660: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7670: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7690: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
76a0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
76b0: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
76c0: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
76d0: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
76e0: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
76f0: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
7700: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
7710: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64  itionals.h>.#end
7720: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
7730: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7740: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
7750: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
7760: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
7770: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
7780: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
7790: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
77a0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
77b0: 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66  _sun) \.  || def
77c0: 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f  ined(__FreeBSD__
77d0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
77e0: 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a  (__DragonFly__).
77f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
7800: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7810: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
7820: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
7830: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
7840: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7850: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
7860: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
7870: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
7880: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
7890: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
78a0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
78b0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
78c0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
78d0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
78e0: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
78f0: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
7900: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
7910: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
7920: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7930: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7940: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7950: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7960: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7970: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7980: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7990: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
79a0: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
79b0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
79c0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
79d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
79e0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
79f0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
7a00: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
7a10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7a20: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7a30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7a40: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7a50: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7a60: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7a70: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7a80: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7a90: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7aa0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7ab0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7ac0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7ad0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
7ae0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
7af0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7b00: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7b10: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7b20: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7b30: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7b40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7b50: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7b60: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7b70: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7b80: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7b90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ba0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
7bc0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
7bd0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
7be0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
7bf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
7c00: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
7c10: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7c20: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7c30: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7c40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7c50: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
7c60: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
7c70: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
7c80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
7c90: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
7ca0: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
7cb0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7cc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7cd0: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
7ce0: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
7cf0: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
7d00: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
7d10: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
7d20: 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndle..**.** The 
7d30: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7d40: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
7d50: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
7d60: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
7d70: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
7d80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7d90: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
7da0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
7db0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
7dc0: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
7dd0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
7de0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
7e10: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
7e20: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
7e30: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
7e40: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
7e50: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
7e60: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
7e70: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
7e80: 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f  xBusyHandler)(vo
7e90: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
7ea0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
7eb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73   */.  void *pBus
7ec0: 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  yArg;           
7ed0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7ee0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
7ef0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
7f00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7f20: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7f30: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
7f40: 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69  */.  u8 bExtraFi
7f50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
7f60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64         /* Includ
7f70: 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61  e sqlite3_file a
7f80: 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a  s callback arg *
7f90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7fa0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7fb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7fc0: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7fd0: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7fe0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7ff0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
8000: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
8010: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
8020: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
8030: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
8040: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
8050: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
8060: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
8070: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
8080: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
8090: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
80a0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
80b0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
80c0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80d0: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
80e0: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
80f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
8100: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
8110: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
8120: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
8130: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
8140: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
8150: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
8160: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
8170: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
8180: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
8190: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
81a0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
81b0: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
81c0: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
81d0: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
81e0: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
81f0: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
8200: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
8210: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
8220: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
8230: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
8240: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
8250: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
8260: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
8270: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
8280: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
8290: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
82a0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
82b0: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
82c0: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
82d0: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
82e0: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
82f0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
8300: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
8310: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
8320: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
8330: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
8340: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
8350: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
8360: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
8370: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
8380: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
8390: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
83a0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
83b0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
83c0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
83d0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
83e0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
83f0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
8400: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
8410: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
8420: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
8430: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
8440: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
8450: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
8460: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
8470: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
8480: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
8490: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
84a0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
84b0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
84c0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
84d0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
84e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
84f0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
8500: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
8510: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
8520: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
8530: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
8540: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
8550: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
8560: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
8570: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
8580: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
8590: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
85a0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
85b0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
85c0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
85d0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
85e0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
85f0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
8600: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
8610: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8620: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
8630: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
8640: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
8650: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
8660: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
8670: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8680: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8690: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
86a0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
86b0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
86c0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
86d0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
86e0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
86f0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
8700: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8710: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
8720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8730: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
8740: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
8750: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
8760: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
8770: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8780: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8790: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
87a0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
87b0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
87c0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
87d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
87e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
87f0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
8800: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8810: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
8820: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
8830: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
8840: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
8850: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
8860: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
8870: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8880: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
88a0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
88b0: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
88c0: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
88d0: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
88e0: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
88f0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
8900: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8910: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
8920: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
8930: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
8940: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
8950: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
8960: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
8970: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8980: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8990: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
89a0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
89b0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
89c0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
89d0: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
89e0: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
89f0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
8a00: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8a10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
8a20: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
8a30: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
8a40: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
8a50: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
8a60: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
8a70: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8a80: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8a90: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8aa0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
8ab0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
8ac0: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
8ad0: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
8ae0: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
8af0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
8b00: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8b10: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
8b20: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
8b30: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
8b40: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
8b50: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
8b60: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
8b70: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8b80: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8b90: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8ba0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
8bb0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
8bc0: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
8bd0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
8be0: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
8bf0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
8c00: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8c10: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
8c20: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
8c30: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
8c40: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
8c50: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
8c60: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8c70: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8c80: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8c90: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8ca0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
8cb0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
8cc0: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
8cd0: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
8ce0: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
8cf0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
8d00: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8d10: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8d20: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
8d30: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
8d50: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
8d60: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
8d70: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8d80: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8d90: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8da0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
8db0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
8dc0: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
8dd0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
8de0: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
8df0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
8e00: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8e10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
8e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
8e40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
8e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
8e90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
8ea0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
8eb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8ec0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
8ed0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ee0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
8ef0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
8f00: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
8f10: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
8f20: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
8f30: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
8f40: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f50: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
8f60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8f70: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
8f80: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
8fa0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
8fb0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
8fc0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
8fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fe0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
9000: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
9010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9020: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
9030: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61  RenameToken Rena
9060: 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  meToken;.typedef
9070: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
9080: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
9090: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
90a0: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
90b0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
90c0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
90d0: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68   struct SQLiteTh
90e0: 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61  read SQLiteThrea
90f0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9100: 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
9110: 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66  ectDest;.typedef
9120: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
9130: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
9140: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
9150: 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a  str StrAccum; /*
9160: 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20   Internal alias 
9170: 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20  for sqlite3_str 
9180: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
9190: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
91b0: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
91c0: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
91d0: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
91e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
91f0: 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b  eeView TreeView;
9200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9210: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
9220: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9230: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
9240: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
9250: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
9260: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
9270: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
9280: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
9290: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
92a0: 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65  edef struct Upse
92b0: 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64  rt Upsert;.typed
92c0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
92d0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
92e0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
92f0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
9300: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
9310: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
9320: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
9330: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
9340: 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77  ef struct Window
9350: 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66   Window;.typedef
9360: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
9370: 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  h;.../*.** The b
9380: 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
9390: 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
93a0: 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
93b0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
93c0: 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
93d0: 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
93e0: 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
93f0: 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
9400: 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
9410: 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
9420: 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
9430: 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
9440: 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
9450: 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
9460: 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
9470: 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65  n ix86..*/.#ifde
9480: 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
9490: 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20  _TYPE.  typedef 
94a0: 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
94b0: 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c  YPE Bitmask;.#el
94c0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
94d0: 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66   Bitmask;.#endif
94e0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
94f0: 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
9500: 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
9510: 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
9520: 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
9530: 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
9540: 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
9550: 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
9560: 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
9570: 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
9580: 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
9590: 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
95a0: 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
95b0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
95c0: 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c  (n)).#define ALL
95d0: 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d  BITS      ((Bitm
95e0: 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c  ask)-1)../* A VL
95f0: 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72  ist object recor
9600: 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74  ds a mapping bet
9610: 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f  ween parameters/
9620: 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61  variables/wildca
9630: 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51  rds.** in the SQ
9640: 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63  L statement (suc
9650: 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c  h as $abc, @pqr,
9660: 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68   or :xyz) and th
9670: 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72  e integer.** var
9680: 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73  iable number ass
9690: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
96a0: 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65  t parameter.  Se
96b0: 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73  e the format des
96c0: 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74  cription.** on t
96d0: 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41  he sqlite3VListA
96e0: 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72  dd() routine for
96f0: 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f   more informatio
9700: 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72  n.  A VList is r
9710: 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e  eally.** just an
9720: 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65   array of intege
9730: 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69  rs..*/.typedef i
9740: 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a  nt VList;../*.**
9750: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
9760: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
9770: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
9780: 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22  he "u8" and.** "
9790: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
97a0: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
97b0: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
97c0: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
97d0: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
97e0: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
97f0: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
9800: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
9810: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
9820: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
9830: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
9840: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69  de "pcache.h".#i
9850: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
9860: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
9870: 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  ../* The SQLITE_
9880: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f  EXTRA_DURABLE co
9890: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
98a0: 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68  n used to set th
98b0: 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e  e default.** syn
98c0: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
98d0: 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69   to EXTRA.  It i
98e0: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70  s no longer supp
98f0: 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  orted..*/.#ifdef
9900: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9910: 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20  RABLE.# warning 
9920: 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  Use SQLITE_DEFAU
9930: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33  LT_SYNCHRONOUS=3
9940: 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49   instead of SQLI
9950: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
9960: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9970: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9980: 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f  NOUS 3.#endif../
9990: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e  *.** Default syn
99a0: 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e  chronous levels.
99b0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
99c0: 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20   (for historcal 
99d0: 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47  reasons) the PAG
99e0: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a  ER_SYNCHRONOUS_*
99f0: 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a   macros differ.*
9a00: 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  * from the SQLIT
9a10: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9a20: 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31  ONOUS value by 1
9a30: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  ..**.**         
9a40: 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e    PAGER_SYNCHRON
9a50: 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c  OUS       DEFAUL
9a60: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a  T_SYNCHRONOUS.**
9a70: 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20     OFF          
9a80: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
9a90: 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20             0.** 
9aa0: 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20    NORMAL        
9ab0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
9ac0: 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20            1.**  
9ad0: 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33   FULL          3
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20           2.**   
9b00: 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20  EXTRA         4 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20          3.**.** 
9b30: 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63  The "PRAGMA sync
9b40: 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65  hronous" stateme
9b50: 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65  nt also uses the
9b60: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9b70: 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ers..** In other
9b80: 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f   words, the zero
9b90: 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61  -based numbers a
9ba0: 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  re used for all 
9bb0: 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61  external interfa
9bc0: 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f  ces.** and the o
9bd0: 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20  ne-based values 
9be0: 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61  are used interna
9bf0: 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  lly..*/.#ifndef 
9c00: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9c10: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66  YNCHRONOUS.# def
9c20: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
9c30: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32  LT_SYNCHRONOUS 2
9c40: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
9c50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9c60: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23  AL_SYNCHRONOUS.#
9c70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
9c80: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9c90: 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45  RONOUS SQLITE_DE
9ca0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
9cb0: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
9cc0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
9cd0: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
9ce0: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
9cf0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
9d00: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
9d10: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
9d20: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
9d30: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
9d40: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
9d50: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
9d60: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
9d70: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
9d80: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
9d90: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
9da0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
9db0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
9dc0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
9dd0: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
9de0: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
9df0: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
9e00: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62  Db {.  char *zDb
9e10: 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  SName;      /* N
9e20: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
9e30: 62 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61  base. (schema na
9e40: 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65  me, not filename
9e50: 29 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  ) */.  Btree *pB
9e60: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
9e70: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
9e80: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
9e90: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
9ea0: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
9eb0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
9ec0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
9ed0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
9ee0: 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b  /.  u8 bSyncSet;
9ef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
9f00: 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63   if "PRAGMA sync
9f10: 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62  hronous=N" has b
9f20: 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68  een run */.  Sch
9f30: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
9f40: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
9f50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
9f60: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
9f70: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
9f80: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9f90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9fa0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
9fb0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
9fc0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
9fd0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
9fe0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
9ff0: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
a000: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
a010: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
a020: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
a030: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
a040: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
a050: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
a060: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
a070: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
a080: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
a090: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
a0a0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
a0b0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
a0c0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
a0d0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a  ared object..**.
a0e0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
a0f0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
a100: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
a110: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
a120: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
a130: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
a140: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
a150: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
a160: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
a170: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
a180: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
a190: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
a1a0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
a1b0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
a1c0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
a1d0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
a1e0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
a1f0: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
a200: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
a210: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
a220: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a230: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
a240: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
a250: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
a260: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
a270: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
a280: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
a290: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
a2a0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
a2b0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
a2c0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
a2d0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
a2e0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
a2f0: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
a300: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
a310: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
a320: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
a330: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
a340: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
a350: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
a360: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
a370: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a380: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
a390: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a3a0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
a3b0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a3c0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
a3d0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
a3e0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
a3f0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a400: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
a410: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
a420: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
a430: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
a440: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
a450: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
a460: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
a470: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
a480: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
a490: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
a4a0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
a4b0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
a4c0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
a4d0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
a4e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
a4f0: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
a500: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
a510: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
a520: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
a530: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
a540: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
a550: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
a560: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
a570: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
a580: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
a590: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
a5a0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
a5b0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
a5c0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
a5d0: 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70  s in the.** Db.p
a5e0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
a5f0: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
a600: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
a610: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
a620: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a630: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
a640: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
a650: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
a660: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
a670: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a680: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
a690: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
a6a0: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
a6b0: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
a6c0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a6d0: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
a6e0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
a6f0: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
a700: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a710: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
a720: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
a730: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
a740: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
a750: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
a760: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
a770: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
a780: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
a790: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
a7a0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
a7b0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
a7c0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
a7d0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
a7e0: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
a7f0: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
a800: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
a810: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
a820: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
a830: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
a840: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
a850: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
a860: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
a870: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
a880: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
a890: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
a8a0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
a8b0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
a8c0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
a8d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
a8e0: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
a8f0: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
a900: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
a910: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
a920: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
a930: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
a940: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
a950: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
a960: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65   0 bytes) */.#de
a970: 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e  fine DB_ResetWan
a980: 74 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20  ted     0x0008  
a990: 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68  /* Reset the sch
a9a0: 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61  ema when nSchema
a9b0: 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a  Lock==0 */../*.*
a9c0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
a9d0: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
a9e0: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
a9f0: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
aa00: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
aa10: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
aa20: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
aa30: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
aa40: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f  (SQLITE_LIMIT_WO
aa50: 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a  RKER_THREADS+1).
aa60: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
aa70: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
aa80: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
aa90: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
aaa0: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
aab0: 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e  tisfy small tran
aac0: 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  sient memory all
aad0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73  ocation requests
aae0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20   for objects.** 
aaf0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ab00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ab10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ab20: 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a  .  The use of.**
ab30: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
ab40: 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67  c provides a sig
ab50: 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
ab60: 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ance enhancement
ab70: 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29  .** (approx 10%)
ab80: 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d   by avoiding num
ab90: 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65  erous malloc/fre
aba0: 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65  e requests while
abb0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20   parsing.** SQL 
abc0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
abd0: 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20  * The Lookaside 
abe0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
abf0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
ac00: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
ac10: 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  the.** lookaside
ac20: 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65   malloc subsyste
ac30: 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62  m.  Each availab
ac40: 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
ac50: 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c  tion in.** the l
ac60: 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74  ookaside subsyst
ac70: 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  em is stored on 
ac80: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
ac90: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a   LookasideSlot.*
aca0: 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a  * objects..**.**
acb0: 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   Lookaside alloc
acc0: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
acd0: 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65  allowed for obje
ace0: 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73  cts that are ass
acf0: 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20  ociated.** with 
ad00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ad10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ad20: 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61  .  Hence, schema
ad30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e   information can
ad40: 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64  not.** be stored
ad50: 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65   in lookaside be
ad60: 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20  cause in shared 
ad70: 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73  cache mode the s
ad80: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
ad90: 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62  n.** is shared b
ada0: 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  y multiple datab
adb0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
adc0: 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69    Therefore, whi
add0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63  le parsing.** sc
ade0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
adf0: 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e  , the Lookaside.
ae00: 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73  bEnabled flag is
ae10: 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74   cleared so that
ae20: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** lookaside al
ae30: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f  locations are no
ae40: 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72  t used to constr
ae50: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f  uct the schema o
ae60: 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
ae70: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20  t Lookaside {.  
ae80: 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20  u32 bDisable;   
ae90: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20          /* Only 
aea0: 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b  operate the look
aeb0: 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20  aside when zero 
aec0: 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20  */.  u16 sz;    
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aee0: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
aef0: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
af00: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
af10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
af20: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
af30: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
af40: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
af50: 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20  u32 nSlot;      
af60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af70: 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73  r of lookaside s
af80: 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  lots allocated *
af90: 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33  /.  u32 anStat[3
afa0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
afb0: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
afc0: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
afd0: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
afe0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e  okasideSlot *pIn
aff0: 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  it;   /* List of
b000: 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65   buffers not pre
b010: 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a  viously used */.
b020: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b030: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
b040: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
b050: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
b060: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
b070: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
b080: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
b090: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
b0a0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
b0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b0c0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
b0d0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
b0e0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
b0f0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
b100: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b110: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
b120: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
b130: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
b140: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
b150: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
b160: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
b170: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b180: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
b190: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
b1a0: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
b1b0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
b1c0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
b1d0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
b1e0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
b1f0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
b200: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
b210: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
b220: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
b230: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
b240: 63 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20  chain.  Use the 
b250: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b260: 28 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63  ().** macro to c
b270: 6f 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e  ompute a hash on
b280: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61   the function na
b290: 6d 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  me..*/.#define S
b2a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b2b0: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
b2c0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
b2d0: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
b2e0: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
b2f0: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
b300: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
b310: 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51  */.};.#define SQ
b320: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43  LITE_FUNC_HASH(C
b330: 2c 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53  ,L) (((C)+(L))%S
b340: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b350: 53 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  SZ)..#ifdef SQLI
b360: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b370: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
b380: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
b390: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
b3a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b3b0: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
b3c0: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
b3d0: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
b3e0: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
b3f0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
b400: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
b410: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
b420: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
b430: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
b440: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
b450: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
b460: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
b470: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
b480: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b490: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
b4a0: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
b4b0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
b4c0: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
b4d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
b4e0: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
b4f0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
b500: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b520: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
b530: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
b540: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
b550: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
b560: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
b570: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
b580: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
b590: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
b5a0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
b5b0: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
b5c0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
b5d0: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
b5e0: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
b5f0: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
b600: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
b610: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
b620: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b630: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
b640: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
b650: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
b660: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
b670: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
b680: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
b690: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
b6a0: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
b6b0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
b6c0: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
b6d0: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
b6e0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
b6f0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
b700: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
b710: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
b720: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
b730: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
b740: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
b750: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
b760: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
b770: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
b780: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
b790: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b7a0: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
b7b0: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
b7c0: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
b7d0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
b7e0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
b7f0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b800: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
b810: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
b820: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
b830: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
b840: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b850: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
b880: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
b890: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
b8a0: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b8b0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b8c0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b8d0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b8e0: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
b910: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
b920: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b930: 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54  _DEPRECATED./* T
b940: 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20  his is an extra 
b950: 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63  SQLITE_TRACE mac
b960: 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ro that indicate
b970: 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69  s "legacy" traci
b980: 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79  ng.** in the sty
b990: 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72  le of sqlite3_tr
b9a0: 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  ace().*/.#define
b9b0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45   SQLITE_TRACE_LE
b9c0: 47 41 43 59 20 20 20 20 20 20 20 20 20 20 30 78  GACY          0x
b9d0: 34 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68  40     /* Use th
b9e0: 65 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20  e legacy xTrace 
b9f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba00: 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45  E_TRACE_XPROFILE
ba10: 20 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20          0x80    
ba20: 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61   /* Use the lega
ba30: 63 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23  cy xProfile */.#
ba40: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c  else.#define SQL
ba50: 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59  ITE_TRACE_LEGACY
ba60: 20 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66            0.#def
ba70: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
ba80: 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20  _XPROFILE       
ba90: 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   0.#endif /* SQL
baa0: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
bab0: 54 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TED */.#define S
bac0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c  QLITE_TRACE_NONL
bad0: 45 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66  EGACY_MASK  0x0f
bae0: 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66       /* Normal f
baf0: 6c 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  lags */.../*.** 
bb00: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  Each database co
bb10: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69  nnection is an i
bb20: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
bb30: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
bb40: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  re..*/.struct sq
bb50: 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65  lite3 {.  sqlite
bb60: 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20  3_vfs *pVfs;    
bb70: 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e          /* OS In
bb80: 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72  terface */.  str
bb90: 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b  uct Vdbe *pVdbe;
bba0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
bbb0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72  st of active vir
bbc0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f  tual machines */
bbd0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c  .  CollSeq *pDfl
bbe0: 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  tColl;          
bbf0: 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20   /* The default 
bc00: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
bc10: 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20  ce (BINARY) */. 
bc20: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
bc30: 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f  mutex;         /
bc40: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  * Connection mut
bc50: 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b  ex */.  Db *aDb;
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc70: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63        /* All bac
bc80: 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  kends */.  int n
bc90: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
bca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bcb0: 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63  er of backends c
bcc0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
bcd0: 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67  */.  u32 mDbFlag
bce0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
bcf0: 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f     /* flags reco
bd00: 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73  rding internal s
bd10: 74 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c  tate */.  u64 fl
bd20: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
bd30: 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73          /* flags
bd40: 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61   settable by pra
bd50: 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  gmas. See below 
bd60: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
bd70: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
bd80: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
bd90: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
bda0: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
bdb0: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdd0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
bde0: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
bdf0: 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f  .  u32 nSchemaLo
be00: 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
be10: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74   /* Do not reset
be20: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
be30: 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75   non-zero */.  u
be40: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
be50: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
be60: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
be70: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
be80: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
be90: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
bea0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
beb0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
bec0: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
bed0: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bef0: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
bf00: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
bf10: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
bf20: 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20   int iSysErrno; 
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf40: 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72  * Errno value fr
bf50: 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65  om last system e
bf60: 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62  rror */.  u16 db
bf70: 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20  OptFlags;       
bf80: 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73          /* Flags
bf90: 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62   to enable/disab
bfa0: 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  le optimizations
bfb0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfd0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
bfe0: 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74  ding */.  u8 aut
bff0: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
c000: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
c010: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
c020: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
c030: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
c040: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
c050: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
c060: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
c070: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
c080: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
c090: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
c0a0: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
c0b0: 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d  */.  u8 bBenignM
c0c0: 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  alloc;          
c0d0: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71     /* Do not req
c0e0: 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75  uire OOMs if tru
c0f0: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
c100: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
c110: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
c120: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
c130: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
c140: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
c150: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
c160: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
c170: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
c180: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
c190: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
c1a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
c1b0: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
c1c0: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
c1d0: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
c1e0: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
c1f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
c200: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
c210: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
c220: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
c230: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
c240: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
c250: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
c260: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
c270: 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20  */.  u8 mTrace; 
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c290: 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f     /* zero or mo
c2a0: 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20  re SQLITE_TRACE 
c2b0: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f  flags */.  u8 no
c2c0: 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20  SharedCache;    
c2d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
c2e0: 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61   if no shared-ca
c2f0: 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  che backends */.
c300: 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20    u8 nSqlExec;  
c310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c320: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e  /* Number of pen
c330: 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20  ding OP_SqlExec 
c340: 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74  opcodes */.  int
c350: 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20   nextPagesize;  
c360: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
c370: 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43  gesize after VAC
c380: 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75  UUM if >0 */.  u
c390: 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20  32 magic;       
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c3b0: 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72  Magic number for
c3c0: 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20   detect library 
c3d0: 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  misuse */.  int 
c3e0: 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  nChange;        
c3f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
c400: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
c410: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
c420: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c   */.  int nTotal
c430: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
c440: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
c450: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
c460: 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
c470: 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74   */.  int aLimit
c480: 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d  [SQLITE_N_LIMIT]
c490: 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f  ;   /* Limits */
c4a0: 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65  .  int nMaxSorte
c4b0: 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  rMmap;          
c4c0: 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65   /* Maximum size
c4d0: 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70   of regions mapp
c4e0: 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a  ed by sorter */.
c4f0: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
c500: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
c510: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
c520: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
c530: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
c540: 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20   int newTnum;   
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c560: 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c  Rootpage of tabl
c570: 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
c580: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44  zed */.    u8 iD
c590: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
c5a0: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
c5b0: 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67  db file is being
c5c0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
c5d0: 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20      u8 busy;    
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65  /* TRUE if curre
c600: 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e  ntly initializin
c610: 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  g */.    unsigne
c620: 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20  d orphanTrigger 
c630: 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61  : 1; /* Last sta
c640: 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e  tement is orphan
c650: 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20  ed TEMP trigger 
c660: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c670: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20  imposterTable : 
c680: 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61  1; /* Building a
c690: 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65  n imposter table
c6a0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c6b0: 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31   reopenMemdb : 1
c6c0: 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73  ;   /* ATTACH is
c6d0: 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e   really a reopen
c6e0: 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a   using MemDB */.
c6f0: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
c700: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
c710: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c720: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
c730: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
c740: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
c750: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
c760: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c770: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
c780: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
c790: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
c7a0: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
c7b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c7c0: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
c7d0: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
c7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
c7f0: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
c800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c810: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
c820: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
c830: 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20  int nVDestroy;  
c840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c850: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c860: 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70  e OP_VDestroy op
c870: 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  erations */.  in
c880: 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  t nExtension;   
c890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c8a0: 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20  umber of loaded 
c8b0: 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20  extensions */.  
c8c0: 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f  void **aExtensio
c8d0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
c8e0: 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64   Array of shared
c8f0: 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73   library handles
c900: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61   */.  int (*xTra
c910: 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f  ce)(u32,void*,vo
c920: 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20  id*,void*);     
c930: 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f  /* Trace functio
c940: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72  n */.  void *pTr
c950: 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  aceArg;         
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c970: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c980: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
c990: 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  on */.#ifndef SQ
c9a0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
c9b0: 41 54 45 44 0a 20 20 76 6f 69 64 20 28 2a 78 50  ATED.  void (*xP
c9c0: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
c9d0: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
c9e0: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
c9f0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
ca00: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
ca30: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
ca40: 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ction */.#endif.
ca50: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
ca60: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
ca70: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
ca80: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
ca90: 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ck() */.  int (*
caa0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
cab0: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
cac0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
cad0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
cae0: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
caf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cb00: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
cb10: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
cb20: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52  ) */.  void (*xR
cb30: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
cb40: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
cb50: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
cb60: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
cb70: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
cb80: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
cb90: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
cba0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
cbb0: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
cbc0: 69 6e 74 36 34 29 3b 0a 20 20 50 61 72 73 65 20  int64);.  Parse 
cbd0: 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
cbe0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
cbf0: 6e 74 20 70 61 72 73 65 20 2a 2f 0a 23 69 66 64  nt parse */.#ifd
cc00: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
cc10: 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
cc20: 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61    void *pPreUpda
cc30: 74 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  teArg;          
cc40: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
cc50: 74 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43  t to xPreUpdateC
cc60: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
cc70: 64 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61  d (*xPreUpdateCa
cc80: 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65  llback)(   /* Re
cc90: 67 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73  gistered using s
cca0: 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65  qlite3_preupdate
ccb0: 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76  _hook() */.    v
ccc0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
ccd0: 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68  t,char const*,ch
cce0: 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65  ar const*,sqlite
ccf0: 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f  3_int64,sqlite3_
cd00: 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65  int64.  );.  Pre
cd10: 55 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61  Update *pPreUpda
cd20: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  te;        /* Co
cd30: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
cd40: 20 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c   pre-update call
cd50: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  back */.#endif /
cd60: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
cd70: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a  PREUPDATE_HOOK *
cd80: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
cd90: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
cda0: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
cdb0: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
cdc0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
cdd0: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
cde0: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
cdf0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
ce00: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
ce10: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
ce20: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
ce30: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
ce40: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
ce50: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
ce60: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
ce70: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
ce80: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
ce90: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
cea0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
ceb0: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
cec0: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
ced0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
cee0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
cef0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
cf00: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
cf10: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
cf20: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
cf30: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
cf40: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
cf50: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
cf60: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
cf70: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
cf80: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
cf90: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
cfa0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
cfb0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73  UTHORIZATION.  s
cfc0: 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75  qlite3_xauth xAu
cfd0: 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  th;          /* 
cfe0: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
cff0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
d000: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
d010: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
d020: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
d030: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
d040: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
d050: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
d060: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
d070: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
d080: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
d090: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
d0a0: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
d0b0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
d0c0: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
d0d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
d0e0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
d0f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
d100: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
d110: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
d120: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
d130: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
d140: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
d150: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
d160: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
d170: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
d180: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
d190: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
d1a0: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
d1b0: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
d1c0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
d1d0: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
d1e0: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
d1f0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
d200: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
d210: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
d220: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
d230: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
d240: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
d250: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
d260: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
d270: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
d280: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
d290: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
d2a0: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
d2b0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
d2c0: 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69  sconnect these i
d2d0: 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70  n next sqlite3_p
d2e0: 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64  repare() */.#end
d2f0: 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b  if.  Hash aFunc;
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d310: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
d320: 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66   of connection f
d330: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61  unctions */.  Ha
d340: 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20  sh aCollSeq;    
d350: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
d360: 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ll collating seq
d370: 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79  uences */.  Busy
d380: 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64  Handler busyHand
d390: 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73  ler;      /* Bus
d3a0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
d3b0: 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b  Db aDbStatic[2];
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d3d0: 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f   Static space fo
d3e0: 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20  r the 2 default 
d3f0: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61  backends */.  Sa
d400: 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
d410: 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  int;        /* L
d420: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61  ist of active sa
d430: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
d440: 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20  t busyTimeout;  
d450: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
d460: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65  usy handler time
d470: 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a  out, in msec */.
d480: 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74    int nSavepoint
d490: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d4a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  /* Number of non
d4b0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
d4c0: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
d4d0: 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20   nStatement;    
d4e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d4f0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73  mber of nested s
d500: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
d510: 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20  tions  */.  i64 
d520: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
d530: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
d540: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
d550: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
d560: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34  action. */.  i64
d570: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
d580: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  s;         /* Ne
d590: 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64  t deferred immed
d5a0: 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  iate constraints
d5b0: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74   */.  int *pnByt
d5c0: 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20  esFreed;        
d5d0: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55      /* If not NU
d5e0: 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  LL, increment th
d5f0: 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a  is in DbFree() *
d600: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
d610: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
d620: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
d630: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
d640: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
d650: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
d660: 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75  C_MASTER.  ** mu
d670: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
d680: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
d690: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
d6a0: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20   in notify.c..  
d6b0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
d6c0: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
d6d0: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
d6e0: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
d6f0: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
d700: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
d710: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
d720: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
d730: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
d740: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
d750: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
d760: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
d770: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
d780: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
d790: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
d7a0: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
d7b0: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
d7c0: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
d7d0: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
d7e0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
d7f0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
d800: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
d810: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
d820: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
d830: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
d840: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
d850: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
d860: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
d870: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d890: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
d8a0: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
d8b0: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
d8c0: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
d8d0: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
d8e0: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
d8f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
d900: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
d910: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
d920: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
d930: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
d940: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
d950: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
d960: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
d970: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
d980: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
d990: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
d9a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
d9b0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
d9c0: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
d9d0: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
d9e0: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
d9f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
da00: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
da10: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
da20: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
da30: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
da40: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
da50: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
da60: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
da70: 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  .flags..**.** Va
da80: 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
da90: 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
daa0: 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
dab0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
dac0: 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46  c     == PAGER_F
dad0: 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20  ULLFSYNC.**     
dae0: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
daf0: 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43  FSync == PAGER_C
db00: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a  KPT_FULLFSYNC.**
db10: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63        SQLITE_Cac
db20: 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41  heSpill    == PA
db30: 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a  GER_CACHE_SPILL.
db40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
db50: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20  E_WriteSchema   
db60: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
db70: 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c  OK to update SQL
db80: 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64  ITE_MASTER */.#d
db90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
dba0: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
dbb0: 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74  000002  /* Creat
dbc0: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
dbd0: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
dbe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
dbf0: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
dc00: 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77  0000004  /* Show
dc10: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
dc20: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
dc30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
dc40: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
dc50: 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65  00000008  /* Use
dc60: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
dc70: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
dc80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
dc90: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
dca0: 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66  000010  /* Use f
dcb0: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
dcc0: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
dcd0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65  ine SQLITE_Cache
dce0: 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30  Spill     0x0000
dcf0: 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73  0020  /* OK to s
dd00: 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65  pill pager cache
dd10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd20: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
dd30: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
dd40: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
dd50: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
dd60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
dd70: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
dd80: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
dd90: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
dda0: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
dde0: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
ddf0: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de20: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
de30: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
de40: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
de50: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
de60: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
de70: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
de80: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
de90: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
ded0: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
dee0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
def0: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
df00: 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  000200  /* Do no
df10: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
df20: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
df30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
df40: 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30  adUncommit   0x0
df50: 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44  0000400  /* READ
df60: 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20   UNCOMMITTED in 
df70: 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a  shared-cache */.
df80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
df90: 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78  oCkptOnClose  0x
dfa0: 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20  00000800  /* No 
dfb0: 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c  checkpoint on cl
dfc0: 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a  ose()/DETACH */.
dfd0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
dfe0: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
dff0: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76  00001000  /* Rev
e000: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
e010: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
e020: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
e030: 67 65 72 73 20 20 20 20 30 78 30 30 30 30 32 30  gers    0x000020
e040: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
e050: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
e060: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e070: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
e080: 20 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a    0x00004000  /*
e090: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
e0a0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
e0b0: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
e0c0: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
e0d0: 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f     0x00008000  /
e0e0: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
e0f0: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
e100: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
e110: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
e120: 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  010000  /* Enabl
e130: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
e140: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e150: 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20  TE_LoadExtFunc  
e160: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
e170: 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74   Enable load_ext
e180: 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e  ension() SQL fun
e190: 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  c */.#define SQL
e1a0: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
e1b0: 72 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f  r  0x00040000  /
e1c0: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
e1d0: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
e1e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
e1f0: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 30 30  rFKs       0x000
e200: 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  80000  /* Defer 
e210: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
e220: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
e230: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
e240: 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20      0x00100000  
e250: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
e260: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ase changes */.#
e270: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65  define SQLITE_Ce
e280: 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30  llSizeCk     0x0
e290: 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63  0200000  /* Chec
e2a0: 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a  k btree cell siz
e2b0: 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64  es on load */.#d
e2c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73  efine SQLITE_Fts
e2d0: 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30  3Tokenizer  0x00
e2e0: 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  400000  /* Enabl
e2f0: 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72  e fts3_tokenizer
e300: 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  (2) */.#define S
e310: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47  QLITE_EnableQPSG
e320: 20 20 20 20 20 30 78 30 30 38 30 30 30 30 30 20       0x00800000 
e330: 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65   /* Query Planne
e340: 72 20 53 74 61 62 69 6c 69 74 79 20 47 75 61 72  r Stability Guar
e350: 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20  antee*/.#define 
e360: 53 51 4c 49 54 45 5f 54 72 69 67 67 65 72 45 51  SQLITE_TriggerEQ
e370: 50 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30  P     0x01000000
e380: 20 20 2f 2a 20 53 68 6f 77 20 74 72 69 67 67 65    /* Show trigge
e390: 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  r EXPLAIN QUERY 
e3a0: 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  PLAN */.#define 
e3b0: 53 51 4c 49 54 45 5f 52 65 73 65 74 44 61 74 61  SQLITE_ResetData
e3c0: 62 61 73 65 20 20 30 78 30 32 30 30 30 30 30 30  base  0x02000000
e3d0: 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20 64    /* Reset the d
e3e0: 61 74 61 62 61 73 65 20 2a 2f 0a 23 64 65 66 69  atabase */.#defi
e3f0: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
e400: 41 6c 74 65 72 20 20 20 20 30 78 30 34 30 30 30  Alter    0x04000
e410: 30 30 30 20 20 2f 2a 20 4c 65 67 61 63 79 20 41  000  /* Legacy A
e420: 4c 54 45 52 20 54 41 42 4c 45 20 62 65 68 61 76  LTER TABLE behav
e430: 69 6f 75 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  iour */.#define 
e440: 53 51 4c 49 54 45 5f 4e 6f 53 63 68 65 6d 61 45  SQLITE_NoSchemaE
e450: 72 72 6f 72 20 20 30 78 30 38 30 30 30 30 30 30  rror  0x08000000
e460: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 70 6f    /* Do not repo
e470: 72 74 20 73 63 68 65 6d 61 20 70 61 72 73 65 20  rt schema parse 
e480: 65 72 72 6f 72 73 2a 2f 0a 23 64 65 66 69 6e 65  errors*/.#define
e490: 20 53 51 4c 49 54 45 5f 44 65 66 65 6e 73 69 76   SQLITE_Defensiv
e4a0: 65 20 20 20 20 20 20 30 78 31 30 30 30 30 30 30  e      0x1000000
e4b0: 30 20 20 2f 2a 20 49 6e 70 75 74 20 53 51 4c 20  0  /* Input SQL 
e4c0: 69 73 20 6c 69 6b 65 6c 79 20 68 6f 73 74 69 6c  is likely hostil
e4d0: 65 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20 75  e */../* Flags u
e4e0: 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65 62 75  sed only if debu
e4f0: 67 67 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  gging */.#define
e500: 20 48 49 28 58 29 20 20 28 28 75 36 34 29 28 58   HI(X)  ((u64)(X
e510: 29 3c 3c 33 32 29 0a 23 69 66 64 65 66 20 53 51  )<<32).#ifdef SQ
e520: 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69  LITE_DEBUG.#defi
e530: 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61  ne SQLITE_SqlTra
e540: 63 65 20 20 20 20 20 20 20 48 49 28 30 78 30 30  ce       HI(0x00
e550: 30 31 29 20 20 2f 2a 20 44 65 62 75 67 20 70 72  01)  /* Debug pr
e560: 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78  int SQL as it ex
e570: 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ecutes */.#defin
e580: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e SQLITE_VdbeLis
e590: 74 69 6e 67 20 20 20 20 48 49 28 30 78 30 30 30  ting    HI(0x000
e5a0: 32 29 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73  2)  /* Debug lis
e5b0: 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72  tings of VDBE pr
e5c0: 6f 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ogs */.#define S
e5d0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
e5e0: 20 20 20 20 20 48 49 28 30 78 30 30 30 34 29 20       HI(0x0004) 
e5f0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63   /* True to trac
e600: 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e  e VDBE execution
e610: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e620: 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63  TE_VdbeAddopTrac
e630: 65 20 48 49 28 30 78 30 30 30 38 29 20 20 2f 2a  e HI(0x0008)  /*
e640: 20 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64   Trace sqlite3Vd
e650: 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20  beAddOp() calls 
e660: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e670: 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20  E_VdbeEQP       
e680: 20 48 49 28 30 78 30 30 31 30 29 20 20 2f 2a 20   HI(0x0010)  /* 
e690: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
e6a0: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
e6b0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 61 72 73 65  ine SQLITE_Parse
e6c0: 72 54 72 61 63 65 20 20 20 20 48 49 28 30 78 30  rTrace    HI(0x0
e6d0: 30 32 30 29 20 20 2f 2a 20 50 52 41 47 4d 41 20  020)  /* PRAGMA 
e6e0: 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f 4e 20  parser_trace=ON 
e6f0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
e700: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
e710: 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62 46  for sqlite3.mDbF
e720: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
e730: 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61  DBFLAG_SchemaCha
e740: 6e 67 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a  nge   0x0001  /*
e750: 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73   Uncommitted Has
e760: 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20  h table changes 
e770: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
e780: 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20  G_PreferBuiltin 
e790: 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65 66   0x0002  /* Pref
e7a0: 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d  erence to built-
e7b0: 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66  in funcs */.#def
e7c0: 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75  ine DBFLAG_Vacuu
e7d0: 6d 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34  m         0x0004
e7e0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69    /* Currently i
e7f0: 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64  n a VACUUM */.#d
e800: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53 63 68  efine DBFLAG_Sch
e810: 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30 30  emaKnownOk  0x00
e820: 30 38 20 20 2f 2a 20 53 63 68 65 6d 61 20 69 73  08  /* Schema is
e830: 20 6b 6e 6f 77 6e 20 74 6f 20 62 65 20 76 61 6c   known to be val
e840: 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  id */../*.** Bit
e850: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
e860: 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c  .dbOptFlags fiel
e870: 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  d that are used 
e880: 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
e890: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
e8a0: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
e8b0: 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e  PTIMIZATIONS,...
e8c0: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a  ) interface to.*
e8d0: 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69  * selectively di
e8e0: 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70  sable various op
e8f0: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  timizations..*/.
e900: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
e910: 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78  ueryFlattener 0x
e920: 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20  0001   /* Query 
e930: 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 20 20  flattening */.  
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e950: 20 20 20 20 20 20 20 20 2f 2a 20 20 30 78 30 30          /*  0x00
e960: 30 32 20 20 20 61 76 61 69 6c 61 62 6c 65 20 66  02   available f
e970: 6f 72 20 72 65 75 73 65 20 2a 2f 0a 23 64 65 66  or reuse */.#def
e980: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
e990: 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34  ByOrder   0x0004
e9a0: 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f     /* GROUPBY co
e9b0: 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a  ver of ORDERBY *
e9c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e9d0: 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20  _FactorOutConst 
e9e0: 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73  0x0008   /* Cons
e9f0: 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a  tant factoring *
ea00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ea10: 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20  _DistinctOpt    
ea20: 30 78 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54  0x0010   /* DIST
ea30: 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78  INCT using index
ea40: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
ea50: 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61  LITE_CoverIdxSca
ea60: 6e 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20  n   0x0020   /* 
ea70: 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73  Covering index s
ea80: 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cans */.#define 
ea90: 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64  SQLITE_OrderById
eaa0: 78 4a 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f  xJoin 0x0040   /
eab0: 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f  * ORDER BY of jo
eac0: 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f  ins via index */
ead0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eae0: 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30  Transitive     0
eaf0: 78 30 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73  x0080   /* Trans
eb00: 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74  itive constraint
eb10: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
eb20: 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e  ITE_OmitNoopJoin
eb30: 20 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f     0x0100   /* O
eb40: 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65  mit unused table
eb50: 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64  s in joins */.#d
eb60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75  efine SQLITE_Cou
eb70: 6e 74 4f 66 56 69 65 77 20 20 20 20 30 78 30 32  ntOfView    0x02
eb80: 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e  00   /* The coun
eb90: 74 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69  t-of-view optimi
eba0: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
ebb0: 65 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48  e SQLITE_CursorH
ebc0: 69 6e 74 73 20 20 20 20 30 78 30 34 30 30 20 20  ints    0x0400  
ebd0: 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f   /* Add OP_Curso
ebe0: 72 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f  rHint opcodes */
ebf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ec00: 53 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30  Stat34         0
ec10: 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53  x0800   /* Use S
ec20: 54 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61  TAT3 or STAT4 da
ec30: 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20  ta */.   /* TH3 
ec40: 65 78 70 65 63 74 73 20 74 68 65 20 53 74 61 74  expects the Stat
ec50: 33 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65  34  ^^^^^^ value
ec60: 20 74 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20   to be 0x0800.  
ec70: 44 6f 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20  Don't change it 
ec80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ec90: 45 5f 50 75 73 68 44 6f 77 6e 20 20 20 20 20 20  E_PushDown      
eca0: 20 30 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65   0x1000   /* The
ecb0: 20 70 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d   push-down optim
ecc0: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
ecd0: 6e 65 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69  ne SQLITE_Simpli
ece0: 66 79 4a 6f 69 6e 20 20 20 30 78 32 30 30 30 20  fyJoin   0x2000 
ecf0: 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46    /* Convert LEF
ed00: 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a  T JOIN to JOIN *
ed10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ed20: 5f 53 6b 69 70 53 63 61 6e 20 20 20 20 20 20 20  _SkipScan       
ed30: 30 78 34 30 30 30 20 20 20 2f 2a 20 53 6b 69 70  0x4000   /* Skip
ed40: 2d 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  -scans */.#defin
ed50: 65 20 53 51 4c 49 54 45 5f 50 72 6f 70 61 67 61  e SQLITE_Propaga
ed60: 74 65 43 6f 6e 73 74 20 30 78 38 30 30 30 20 20  teConst 0x8000  
ed70: 20 2f 2a 20 54 68 65 20 63 6f 6e 73 74 61 6e 74   /* The constant
ed80: 20 70 72 6f 70 61 67 61 74 69 6f 6e 20 6f 70 74   propagation opt
ed90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
eda0: 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20  TE_AllOpts      
edb0: 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c    0xffff   /* Al
edc0: 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  l optimizations 
edd0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
ede0: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65   for testing whe
edf0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69  ther or not opti
ee00: 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e  mizations are en
ee10: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
ee20: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70  d..*/.#define Op
ee30: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
ee40: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28  ed(db, mask)  ((
ee50: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
ee60: 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65  &(mask))!=0).#de
ee70: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
ee80: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
ee90: 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  k)   (((db)->dbO
eea0: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d  ptFlags&(mask))=
eeb0: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  =0)../*.** Retur
eec0: 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20  n true if it OK 
eed0: 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61  to factor consta
eee0: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  nt expressions i
eef0: 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  nto the initiali
ef00: 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20  zation.** code. 
ef10: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  The argument is 
ef20: 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66  a Parse object f
ef30: 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  or the code gene
ef40: 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rator..*/.#defin
ef50: 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28  e ConstFactorOk(
ef60: 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74  P) ((P)->okConst
ef70: 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50  Factor)../*.** P
ef80: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
ef90: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61  or the sqlite.ma
efa0: 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68  gic field..** Th
efb0: 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62  e numbers are ob
efc0: 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d  tained at random
efd0: 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65   and have no spe
efe0: 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74  cial meaning, ot
eff0: 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e  her.** than bein
f000: 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  g distinct from 
f010: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a  one another..*/.
f020: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f030: 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78  AGIC_OPEN     0x
f040: 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74  a029a697  /* Dat
f050: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f  abase is open */
f060: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f070: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30  MAGIC_CLOSED   0
f080: 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61  x9f3c2d33  /* Da
f090: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
f0a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f0b0: 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20  TE_MAGIC_SICK   
f0c0: 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a    0x4b771290  /*
f0d0: 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74   Error and await
f0e0: 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65  ing close */.#de
f0f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
f100: 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33  C_BUSY     0xf03
f110: 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61  b7906  /* Databa
f120: 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  se currently in 
f130: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
f140: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f  QLITE_MAGIC_ERRO
f150: 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20  R    0xb5357930 
f160: 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49   /* An SQLITE_MI
f170: 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72  SUSE error occur
f180: 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  red */.#define S
f190: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42  QLITE_MAGIC_ZOMB
f1a0: 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20  IE   0x64cffc7f 
f1b0: 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c   /* Close with l
f1c0: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c  ast statement cl
f1d0: 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ose */../*.** Ea
f1e0: 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  ch SQL function 
f1f0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
f200: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
f210: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
f220: 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c  ructure.  For gl
f230: 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75  obal built-in fu
f240: 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62  nctions (ex: sub
f250: 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f  str(), max(), co
f260: 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e  unt()).** a poin
f270: 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
f280: 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e  cture is held in
f290: 20 74 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c   the sqlite3Buil
f2a0: 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a  tinFunctions obj
f2b0: 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d  ect..** For per-
f2c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69  connection appli
f2d0: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66  cation-defined f
f2e0: 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e  unctions, a poin
f2f0: 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73  ter to this.** s
f300: 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64  tructure is held
f310: 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73   in the db->aHas
f320: 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a  h hash table..**
f330: 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20  .** The u.pHash 
f340: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79  field is used by
f350: 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c   the global buil
f360: 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44  t-ins.  The u.pD
f370: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65  estructor.** fie
f380: 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 70 65  ld is used by pe
f390: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70  r-connection app
f3a0: 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  -def functions..
f3b0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
f3c0: 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20  f {.  i8 nArg;  
f3d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
f3e0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
f3f0: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
f400: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 33 32 20  imited */.  u32 
f410: 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  funcFlags;      
f420: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
f430: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
f440: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
f450: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
f460: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
f470: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
f480: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
f490: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
f4a0: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
f4b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46   */.  void (*xSF
f4c0: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
f4d0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
f4e0: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66  3_value**); /* f
f4f0: 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20  unc or agg-step 
f500: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
f510: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63  alize)(sqlite3_c
f520: 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20  ontext*);       
f530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67             /* Ag
f540: 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20  g finalizer */. 
f550: 20 76 6f 69 64 20 28 2a 78 56 61 6c 75 65 29 28   void (*xValue)(
f560: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f570: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  );              
f580: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
f590: 74 20 61 67 67 20 76 61 6c 75 65 20 2a 2f 0a 20  t agg value */. 
f5a0: 20 76 6f 69 64 20 28 2a 78 49 6e 76 65 72 73 65   void (*xInverse
f5b0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f5c0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
f5d0: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 69 6e 76 65  alue**); /* inve
f5e0: 72 73 65 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a  rse agg-step */.
f5f0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
f600: 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61  ame;   /* SQL na
f610: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
f620: 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  on. */.  union {
f630: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48  .    FuncDef *pH
f640: 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ash;      /* Nex
f650: 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65  t with a differe
f660: 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20  nt name but the 
f670: 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20  same hash */.   
f680: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
f690: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
f6a0: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
f6b0: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
f6c0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20  function */.  } 
f6d0: 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  u;.};../*.** Thi
f6e0: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
f6f0: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
f700: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
f710: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
f720: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
f730: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
f740: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
f750: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
f760: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
f770: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
f780: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
f790: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
f7a0: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
f7b0: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
f7c0: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
f7d0: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
f7e0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
f7f0: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a  nRef is set to.*
f800: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
f810: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
f820: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
f830: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
f840: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
f850: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
f860: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
f870: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
f880: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
f890: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
f8a0: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
f8b0: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
f8c0: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
f8d0: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
f8e0: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
f8f0: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
f900: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
f910: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
f920: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
f930: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
f940: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
f950: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
f960: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
f970: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
f980: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
f990: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
f9a0: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
f9b0: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
f9c0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
f9d0: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
f9e0: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
f9f0: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
fa00: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
fa10: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
fa20: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
fa30: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
fa40: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
fa50: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
fa60: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
fa70: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
fa80: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
fa90: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
faa0: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e  G_TYPEOFARG.  An
fab0: 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43  d.** SQLITE_FUNC
fac0: 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62  _CONSTANT must b
fad0: 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51  e the same as SQ
fae0: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
faf0: 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  IC.  There.** ar
fb00: 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
fb10: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
fb20: 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73  e to verify this
fb30: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
fb40: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
fb50: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
fb60: 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ):.**     SQLITE
fb70: 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20  _FUNC_MINMAX    
fb80: 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ==  NC_MinMaxAgg
fb90: 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d        == SF_MinM
fba0: 61 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c  axAgg.**     SQL
fbb0: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
fbc0: 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45     ==  OPFLAG_LE
fbd0: 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53  NGTHARG.**     S
fbe0: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
fbf0: 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f  F    ==  OPFLAG_
fc00: 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20  TYPEOFARG.**    
fc10: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fc20: 53 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54  STANT  ==  SQLIT
fc30: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20  E_DETERMINISTIC 
fc40: 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20  from the API.** 
fc50: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
fc60: 45 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64  ENCMASK   depend
fc70: 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a  s on SQLITE_UTF*
fc80: 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41   macros in the A
fc90: 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  PI.*/.#define SQ
fca0: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
fcb0: 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c  K  0x0003 /* SQL
fcc0: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
fcd0: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
fce0: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
fcf0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
fd00: 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61      0x0004 /* Ca
fd10: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
fd20: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
fd30: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fd40: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
fd50: 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65    0x0008 /* Case
fd60: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
fd70: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
fd80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fd90: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
fda0: 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  0010 /* Ephemera
fdb0: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
fdc0: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
fdd0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
fde0: 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73  COLL 0x0020 /* s
fdf0: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
fe00: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
fe10: 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65  called*/.#define
fe20: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
fe30: 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20  GTH   0x0040 /* 
fe40: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
fe50: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
fe60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fe70: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38  C_TYPEOF   0x008
fe80: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
fe90: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
fea0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
feb0: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
fec0: 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0100 /* Built-
fed0: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
fee0: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
fef0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
ff00: 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20  LESCE 0x0200 /* 
ff10: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
ff20: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
ff30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ff40: 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
ff50: 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0400 /* Built-
ff60: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
ff70: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
ff80: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
ff90: 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a  NSTANT 0x0800 /*
ffa0: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
ffb0: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
ffc0: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
ffd0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
ffe0: 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f  INMAX   0x1000 /
fff0: 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
10000 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
10010 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  gates */.#define
10020 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10030 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20  CHNG  0x2000 /* 
10040 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56  "Slow Change". V
10050 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75  alue constant du
10060 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20  ring a.         
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10080 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69             ** si
10090 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67  ngle query - mig
100a0 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74  ht change over t
100b0 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ime */.#define S
100c0 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e  QLITE_FUNC_AFFIN
100d0 49 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75  ITY 0x4000 /* Bu
100e0 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28  ilt-in affinity(
100f0 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
10100 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
10110 43 5f 4f 46 46 53 45 54 20 20 20 30 78 38 30 30  C_OFFSET   0x800
10120 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71  0 /* Built-in sq
10130 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75  lite_offset() fu
10140 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
10150 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49  e SQLITE_FUNC_WI
10160 4e 44 4f 57 20 20 20 30 78 30 30 30 31 30 30 30  NDOW   0x0001000
10170 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 77 69  0 /* Built-in wi
10180 6e 64 6f 77 2d 6f 6e 6c 79 20 66 75 6e 63 74 69  ndow-only functi
10190 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
101a0 4c 49 54 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e  LITE_FUNC_INTERN
101b0 41 4c 20 30 78 30 30 30 34 30 30 30 30 20 2f 2a  AL 0x00040000 /*
101c0 20 46 6f 72 20 75 73 65 20 62 79 20 4e 65 73 74   For use by Nest
101d0 65 64 50 61 72 73 65 28 29 20 6f 6e 6c 79 20 2a  edParse() only *
101e0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
101f0 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
10200 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
10210 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
10220 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
10230 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
10240 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
10250 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
10260 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
10270 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
10280 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10290 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
102a0 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
102b0 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
102c0 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
102d0 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
102e0 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d 70  zName.**     imp
102f0 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75  lemented by C fu
10300 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61  nction xFunc tha
10310 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
10320 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a  rguments. The.**
10330 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65       value passe
10340 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73  d as iArg is cas
10350 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61  t to a (void*) a
10360 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c  nd made availabl
10370 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20  e.**     as the 
10380 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
10390 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20  e3_user_data()) 
103a0 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  for the function
103b0 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72 67 75  . If.**     argu
103c0 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65  ment bNC is true
103d0 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  , then the SQLIT
103e0 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
103f0 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
10400 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a  **   VFUNCTION(z
10410 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10420 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
10430 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
10440 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
10450 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
10460 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
10470 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43 54  ..**.**   DFUNCT
10480 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
10490 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
104a0 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46  c).**     Like F
104b0 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69  UNCTION except i
104c0 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49  t omits the SQLI
104d0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
104e0 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20 20   flag and.**    
104f0 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54 45   adds the SQLITE
10500 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66 6c  _FUNC_SLOCHNG fl
10510 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64 61  ag.  Used for da
10520 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74 69  te & time functi
10530 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20 66  ons.**     and f
10540 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73 71  unctions like sq
10550 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 74  lite_version() t
10560 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c 20  hat can change, 
10570 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a 2a  but not during.*
10580 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20 71  *     a single q
10590 75 65 72 79 2e 20 20 54 68 65 20 69 41 72 67 20  uery.  The iArg 
105a0 69 73 20 69 67 6e 6f 72 65 64 2e 20 20 54 68 65  is ignored.  The
105b0 20 75 73 65 72 2d 64 61 74 61 20 69 73 20 61 6c   user-data is al
105c0 77 61 79 73 20 73 65 74 0a 2a 2a 20 20 20 20 20  ways set.**     
105d0 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65  to a NULL pointe
105e0 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72 61  r.  The bNC para
105f0 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65  meter is not use
10600 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52 45 5f  d..**.**   PURE_
10610 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  DATE(zName, nArg
10620 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10630 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  nc).**     Used 
10640 66 6f 72 20 22 70 75 72 65 22 20 64 61 74 65 2f  for "pure" date/
10650 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20  time functions, 
10660 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6c 69  this macro is li
10670 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20  ke DFUNCTION.** 
10680 20 20 20 20 65 78 63 65 70 74 20 74 68 61 74 20      except that 
10690 69 74 20 64 6f 65 73 20 73 65 74 20 74 68 65 20  it does set the 
106a0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
106b0 54 41 4e 54 20 66 6c 61 67 73 2e 20 20 69 41 72  TANT flags.  iAr
106c0 67 20 69 73 0a 2a 2a 20 20 20 20 20 69 67 6e 6f  g is.**     igno
106d0 72 65 64 20 61 6e 64 20 74 68 65 20 75 73 65 72  red and the user
106e0 2d 64 61 74 61 20 66 6f 72 20 74 68 65 73 65 20  -data for these 
106f0 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 73 65 74  functions is set
10700 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20 20 20 61   to an .**     a
10710 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c  rbitrary non-NUL
10720 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20  L pointer.  The 
10730 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69 73  bNC parameter is
10740 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
10750 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
10760 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10770 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
10780 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
10790 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
107a0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
107b0 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
107c0 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
107d0 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
107e0 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
107f0 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
10800 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
10810 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
10820 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
10830 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
10840 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
10850 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
10860 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57 46 55 4e  ()..**.**   WFUN
10870 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
10880 67 2c 20 69 41 72 67 2c 20 78 53 74 65 70 2c 20  g, iArg, xStep, 
10890 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20  xFinal, xValue, 
108a0 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20 20 20 20  xInverse).**    
108b0 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
108c0 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
108d0 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
108e0 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a   implemented by.
108f0 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e  **     the C fun
10900 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64  ctions xStep and
10910 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72   xFinal. The fir
10920 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65  st four paramete
10930 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e  rs.**     are in
10940 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65  terpreted in the
10950 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65   same way as the
10960 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74   first 4 paramet
10970 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55  ers to.**     FU
10980 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20  NCTION()..**.** 
10990 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65    LIKEFUNC(zName
109a0 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c  , nArg, pArg, fl
109b0 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  ags).**     Used
109c0 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
109d0 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
109e0 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
109f0 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20  ction zName.**  
10a00 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20     that accepts 
10a10 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61  nArg arguments a
10a20 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  nd is implemente
10a30 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43  d by a call to C
10a40 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
10a50 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
10a60 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
10a70 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
10a80 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
10a90 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
10aa0 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
10ab0 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
10ac0 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
10ad0 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
10ae0 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
10af0 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
10b00 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
10b10 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
10b20 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
10b30 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
10b40 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10b50 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10b60 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10b70 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
10b80 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
10b90 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
10ba0 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
10bb0 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10bc0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10bd0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10be0 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f  #define VFUNCTIO
10bf0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
10c00 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10c10 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10c20 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10c30 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10c40 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
10c50 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10c60 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10c70 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10c80 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43   }.#define DFUNC
10c90 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10ca0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10cb0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10cc0 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10cd0 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  NG|SQLITE_UTF8, 
10ce0 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63  \.   0, 0, xFunc
10cf0 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
10d00 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
10d10 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65   PURE_DATE(zName
10d20 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10d30 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
10d40 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10d50 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
10d60 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43  UTF8|SQLITE_FUNC
10d70 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20  _CONSTANT, \.   
10d80 28 76 6f 69 64 2a 29 26 73 71 6c 69 74 65 33 43  (void*)&sqlite3C
10d90 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c  onfig, 0, xFunc,
10da0 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
10db0 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10dc0 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
10dd0 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10de0 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
10df0 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53  ags) \.  {nArg,S
10e00 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
10e10 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
10e20 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
10e30 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
10e40 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54  Flags,\.   SQLIT
10e50 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
10e60 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
10e70 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b   0, 0, #zName, {
10e80 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54 52  0} }.#define STR
10e90 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
10ea0 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43   nArg, pArg, bNC
10eb0 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10ec0 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10ed0 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55  SLOCHNG|SQLITE_U
10ee0 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
10ef0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
10f00 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
10f10 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
10f20 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20  Name, }.#define 
10f30 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
10f40 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
10f50 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10f60 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10f70 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c  T|SQLITE_UTF8|fl
10f80 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20  ags, \.   (void 
10f90 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
10fa0 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10fb0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10fc0 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61  ne AGGREGATE(zNa
10fd0 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
10fe0 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
10ff0 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20 20 7b 6e  , xValue) \.  {n
11000 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
11010 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
11020 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
11030 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
11040 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
11050 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c  p,xFinal,xValue,
11060 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23  0,#zName, {0}}.#
11070 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
11080 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  2(zName, nArg, a
11090 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
110a0 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67  Final, extraFlag
110b0 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
110c0 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
110d0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
110e0 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
110f0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
11100 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
11110 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 46 69  xStep,xFinal,xFi
11120 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30  nal,0,#zName, {0
11130 7d 7d 0a 23 64 65 66 69 6e 65 20 57 41 47 47 52  }}.#define WAGGR
11140 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
11150 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
11160 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75  p, xFinal, xValu
11170 65 2c 20 78 49 6e 76 65 72 73 65 2c 20 66 29 20  e, xInverse, f) 
11180 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
11190 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
111a0 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
111b0 7c 66 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  |f, \.   SQLITE_
111c0 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
111d0 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
111e0 2c 78 56 61 6c 75 65 2c 78 49 6e 76 65 72 73 65  ,xValue,xInverse
111f0 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64  ,#zName, {0}}.#d
11200 65 66 69 6e 65 20 49 4e 54 45 52 4e 41 4c 5f 46  efine INTERNAL_F
11210 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
11220 41 72 67 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  Arg, xFunc) \.  
11230 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
11240 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c 53 51 4c 49  NC_INTERNAL|SQLI
11250 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46  TE_UTF8|SQLITE_F
11260 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a  UNC_CONSTANT, \.
11270 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20     0, 0, xFunc, 
11280 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
11290 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41   {0} }.../*.** A
112a0 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65 70  ll current savep
112b0 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64  oints are stored
112c0 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   in a linked lis
112d0 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a  t starting at.**
112e0 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
112f0 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20 65  int. The first e
11300 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69  lement in the li
11310 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72  st is the most r
11320 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65  ecently.** opene
11330 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76  d savepoint. Sav
11340 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65  epoints are adde
11350 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79  d to the list by
11360 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f   the vdbe.** OP_
11370 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
11380 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
11390 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63   Savepoint {.  c
113a0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113c0 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20     /* Savepoint 
113d0 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e  name (nul-termin
113e0 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e  ated) */.  i64 n
113f0 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11410 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
11420 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f  rred fk violatio
11430 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  ns */.  i64 nDef
11440 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20  erredImmCons;   
11450 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
11460 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
11470 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53  d imm fk. */.  S
11480 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b  avepoint *pNext;
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114a0 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76     /* Parent sav
114b0 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20  epoint (if any) 
114c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
114d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75   following are u
114e0 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e  sed as the secon
114f0 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
11500 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
11510 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65  ),.** and as the
11520 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
11530 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  the OP_Savepoint
11540 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
11550 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
11560 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a  NT_BEGIN      0.
11570 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
11580 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23  T_RELEASE    1.#
11590 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
115a0 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a  _ROLLBACK   2...
115b0 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74  /*.** Each SQLit
115c0 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61  e module (virtua
115d0 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  l table definiti
115e0 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20 62  on) is defined b
115f0 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
11600 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
11610 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f  g structure, sto
11620 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
11630 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61  e3.aModule.** ha
11640 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72  sh table..*/.str
11650 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63  uct Module {.  c
11660 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
11670 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20  ule *pModule;   
11680 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
11690 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f  pointers */.  co
116a0 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116c0 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65     /* Name passe
116d0 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
116e0 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  le() */.  void *
116f0 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20  pAux;           
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11710 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f  * pAux passed to
11720 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
11730 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65   */.  void (*xDe
11740 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20  stroy)(void *); 
11750 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
11760 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20  dule destructor 
11770 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61  function */.  Ta
11780 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20  ble *pEpoTab;   
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117a0 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20     /* Eponymous 
117b0 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d  table for this m
117c0 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  odule */.};../*.
117d0 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
117e0 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
117f0 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   of an SQL table
11800 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69   is held in an i
11810 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
11820 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
11830 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b  .struct Column {
11840 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
11850 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
11860 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30  his column, \000
11870 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70 65 20  , then the type 
11880 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
11890 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
118a0 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
118b0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
118c0 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43  *zColl;     /* C
118d0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
118e0 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65  e.  If NULL, use
118f0 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
11900 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20    u8 notNull;   
11910 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64     /* An OE_ cod
11920 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61  e for handling a
11930 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
11940 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61  aint */.  char a
11950 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e  ffinity;   /* On
11960 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
11970 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a  AFF_... values *
11980 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20  /.  u8 szEst;   
11990 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
119a0 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20  d size of value 
119b0 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  in this column. 
119c0 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a  sizeof(INT)==1 *
119d0 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b  /.  u8 colFlags;
119e0 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20       /* Boolean 
119f0 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65  properties.  See
11a00 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65   COLFLAG_ define
11a10 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  s below */.};../
11a20 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
11a30 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46   for Column.colF
11a40 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags:.*/.#define
11a50 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
11a60 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43    0x0001    /* C
11a70 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66  olumn is part of
11a80 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
11a90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
11aa0 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30  LAG_HIDDEN   0x0
11ab0 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64  002    /* A hidd
11ac0 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76  en column in a v
11ad0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
11ae0 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
11af0 48 41 53 54 59 50 45 20 20 30 78 30 30 30 34 20  HASTYPE  0x0004 
11b00 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20     /* Type name 
11b10 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e  follows column n
11b20 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  ame */.#define C
11b30 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45 20 20 20  OLFLAG_UNIQUE   
11b40 30 78 30 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c  0x0008    /* Col
11b50 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e 73  umn def contains
11b60 20 22 55 4e 49 51 55 45 22 20 6f 72 20 22 50 4b   "UNIQUE" or "PK
11b70 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  " */.#define COL
11b80 46 4c 41 47 5f 53 4f 52 54 45 52 52 45 46 20 30  FLAG_SORTERREF 0
11b90 78 30 30 31 30 20 20 20 2f 2a 20 55 73 65 20 73  x0010   /* Use s
11ba0 6f 72 74 65 72 2d 72 65 66 73 20 77 69 74 68 20  orter-refs with 
11bb0 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a  this column */..
11bc0 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69  /*.** A "Collati
11bd0 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20  ng Sequence" is 
11be0 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
11bf0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11c00 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
11c10 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c  ture. Conceptual
11c20 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ly, a collating 
11c30 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74  sequence consist
11c40 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a  s of a name and.
11c50 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20  ** a comparison 
11c60 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66  routine that def
11c70 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f  ines the order o
11c80 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e  f that sequence.
11c90 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65  .**.** If CollSe
11ca0 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20  q.xCmp is NULL, 
11cb0 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
11cc0 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
11cd0 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
11ce0 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
11cf0 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
11d00 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
11d10 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
11d20 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
11d30 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
11d40 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
11d50 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
11d60 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
11d70 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
11d80 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
11d90 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11db0 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
11dc0 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
11dd0 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  ) */.  void *pUs
11de0 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
11df0 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
11e00 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e  o xCmp() */.  in
11e10 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c  t (*xCmp)(void*,
11e20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
11e30 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
11e40 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  d*);.  void (*xD
11e50 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20  el)(void*);  /* 
11e60 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70  Destructor for p
11e70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  User */.};../*.*
11e80 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63  * A sort order c
11e90 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43  an be either ASC
11ea0 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65   or DESC..*/.#de
11eb0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41  fine SQLITE_SO_A
11ec0 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53  SC       0  /* S
11ed0 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
11ee0 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
11ef0 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43  e SQLITE_SO_DESC
11f00 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74        1  /* Sort
11f10 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
11f20 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
11f30 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e  QLITE_SO_UNDEFIN
11f40 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74  ED -1 /* No sort
11f50 20 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64   order specified
11f60 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d   */../*.** Colum
11f70 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  n affinity types
11f80 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73  ..**.** These us
11f90 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f  ed to have mnemo
11fa0 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69  nic name like 'i
11fb0 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
11fc0 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20  _INTEGER and.** 
11fd0 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  't' for SQLITE_A
11fe0 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65  FF_TEXT.  But we
11ff0 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74   can save a litt
12000 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70  le space and imp
12010 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65  rove.** the spee
12020 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75  d a little by nu
12030 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75  mbering the valu
12040 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79  es consecutively
12050 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68  ..**.** But rath
12060 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
12070 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
12080 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54  gin with 'A'.  T
12090 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
120a0 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
120b0 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
120c0 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
120d0 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
120e0 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
120f0 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
12100 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
12110 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
12120 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
12130 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
12140 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
12150 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
12160 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
12170 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
12180 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e   comparison.  An
12190 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20  d the BLOB type 
121a0 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65  is first..*/.#de
121b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
121c0 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65  BLOB     'A'.#de
121d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
121e0 54 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65  TEXT     'B'.#de
121f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
12200 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65  NUMERIC  'C'.#de
12210 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
12220 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65  INTEGER  'D'.#de
12230 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
12240 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64  REAL     'E'..#d
12250 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
12260 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
12270 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
12280 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
12290 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
122a0 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
122b0 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
122c0 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
122d0 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
122e0 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  value..*/.#defin
122f0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
12300 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a  K     0x47../*.*
12310 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74  * Additional bit
12320 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e   values that can
12330 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e   be ORed with an
12340 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75   affinity withou
12350 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68  t.** changing th
12360 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a  e affinity..**.*
12370 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54  * The SQLITE_NOT
12380 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63  NULL flag is a c
12390 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55  ombination of NU
123a0 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e  LLEQ and JUMPIFN
123b0 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65  ULL..** It cause
123c0 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f  s an assert() to
123d0 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20   fire if either 
123e0 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d  operand to a com
123f0 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61  parison.** opera
12400 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74  tor is NULL.  It
12410 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72   is added to cer
12420 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20  tain comparison 
12430 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20  operators to.** 
12440 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f  prove that the o
12450 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61  perands are alwa
12460 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ys NOT NULL..*/.
12470 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b  #define SQLITE_K
12480 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38  EEPNULL     0x08
12490 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63    /* Used by vec
124a0 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a  tor == or <> */.
124b0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
124c0 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30  UMPIFNULL   0x10
124d0 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
124e0 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
124f0 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
12500 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
12510 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f      0x20  /* Sto
12520 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
12530 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
12540 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
12550 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
12560 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
12570 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  LL=NULL */.#defi
12580 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  ne SQLITE_NOTNUL
12590 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20  L      0x90  /* 
125a0 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72  Assert that oper
125b0 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e  ands are never N
125c0 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ULL */../*.** An
125d0 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
125e0 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20  type is created 
125f0 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c  for each virtual
12600 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69   table present i
12610 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73  n.** the databas
12620 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
12630 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
12640 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
12650 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
12660 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
12670 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
12680 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  e for each datab
12690 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28  ase connection (
126a0 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75  sqlite3*) that u
126b0 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a  ses the shared.*
126c0 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69  * schema. This i
126d0 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64  s because each d
126e0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
126f0 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20  on requires its 
12700 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e  own unique.** in
12710 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71  stance of the sq
12720 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
12730 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  le used to acces
12740 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
12750 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74  ble.** implement
12760 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76  ation. sqlite3_v
12770 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e  tab* handles can
12780 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62   not be shared b
12790 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61  etween.** databa
127a0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20  se connections, 
127b0 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65  even when the re
127c0 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d  st of the in-mem
127d0 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ory database.** 
127e0 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
127f0 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65  , as the impleme
12800 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74  ntation often st
12810 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ores the databas
12820 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
12830 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f  handle passed to
12840 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e   it via the xCon
12850 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74  nect() or xCreat
12860 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75  e() method.** du
12870 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
12880 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20  ion internally. 
12890 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f  This database co
128a0 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
128b0 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75  may.** then be u
128c0 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75  sed by the virtu
128d0 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
128e0 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73  ntation to acces
128f0 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a  s real tables.**
12900 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61   within the data
12910 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68  base. So that th
12920 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72  ey appear as par
12930 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73  t of the callers
12940 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
12950 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
12960 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
12970 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
12980 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
12990 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64  ion as that used
129a0 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20   to execute SQL 
129b0 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68  operations on th
129c0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
129d0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c  .**.** All VTabl
129e0 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63  e objects that c
129f0 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73  orrespond to a s
12a00 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61  ingle table in a
12a10 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62   shared.** datab
12a20 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69  ase schema are i
12a30 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20  nitially stored 
12a40 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  in a linked-list
12a50 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a   pointed to by.*
12a60 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  * the Table.pVTa
12a70 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61  ble member varia
12a80 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ble of the corre
12a90 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f  sponding Table o
12aa0 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61  bject..** When a
12ab0 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
12ac0 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  e() operation is
12ad0 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63   required to acc
12ae0 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ess the virtual.
12af0 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61  ** table, it sea
12b00 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66  rches the list f
12b10 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68  or the VTable th
12b20 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
12b30 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
12b40 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69  e connection doi
12b50 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67  ng the preparing
12b60 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68   so as to use th
12b70 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c  e correct.** sql
12b80 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
12b90 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65  e in the compile
12ba0 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57  d query..**.** W
12bb0 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  hen an in-memory
12bc0 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73   Table object is
12bd0 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78   deleted (for ex
12be0 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a  ample when the.*
12bf0 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e  * schema is bein
12c00 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73  g reloaded for s
12c10 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65  ome reason), the
12c20 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
12c30 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74  are not.** delet
12c40 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
12c50 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
12c60 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
12c70 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65  nect()ed.** imme
12c80 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
12c90 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
12ca0 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
12cb0 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
12cc0 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
12cd0 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
12ce0 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
12cf0 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
12d00 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
12d10 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
12d20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
12d30 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
12d40 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a  /xDisconnected.*
12d50 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74  * next time a st
12d60 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61  atement is prepa
12d70 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73  red using said s
12d80 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73  qlite3*. This is
12d90 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   done.** to avoi
12da0 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65  d deadlock issue
12db0 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
12dc0 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74  iple sqlite3.mut
12dd0 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52  ex mutexes..** R
12de0 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73  efer to comments
12df0 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
12e00 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
12e10 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a  kList() for an.*
12e20 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73  * explanation as
12e30 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61   to why it is sa
12e40 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74  fe to add an ent
12e50 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  ry to an sqlite3
12e60 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20  .pDisconnect.** 
12e70 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c  list without hol
12e80 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ding the corresp
12e90 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d  onding sqlite3.m
12ea0 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a  utex mutex..**.*
12eb0 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72  * The memory for
12ec0 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73   objects of this
12ed0 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20   type is always 
12ee0 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20  allocated by.** 
12ef0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
12f00 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
12f10 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
12f20 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
12f30 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72  db as.** the fir
12f40 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
12f50 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
12f60 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
12f70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
12f80 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
12f90 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
12fa0 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
12fb0 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12fd0 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
12fe0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
12ff0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
13000 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
13010 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
13020 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
13030 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
13040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
13050 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
13060 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
13070 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
13080 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
13090 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
130a0 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
130b0 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
130c0 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
130d0 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
130e0 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
130f0 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
13100 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
13110 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
13120 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
13130 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
13140 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20  *.** The schema 
13150 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61 62  for each SQL tab
13160 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73 20 72  le and view is r
13170 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
13180 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e  mory.** by an in
13190 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
131a0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
131b0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62  e..*/.struct Tab
131c0 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  le {.  char *zNa
131d0 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
131e0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
131f0 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f   or view */.  Co
13200 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20  lumn *aCol;     
13210 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
13220 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
13230 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
13240 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a  pIndex;       /*
13250 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64   List of SQL ind
13260 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62  exes on this tab
13270 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  le. */.  Select 
13280 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
13290 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73   NULL for tables
132a0 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66  .  Points to def
132b0 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65  inition if a vie
132c0 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46  w. */.  FKey *pF
132d0 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
132e0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61  Linked list of a
132f0 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
13300 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
13310 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
13320 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e  ;       /* Strin
13330 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
13340 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
13350 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72  column */.  Expr
13360 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
13370 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
13380 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20  nstraints */.   
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73      /*   ... als
133b0 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e  o used as column
133c0 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20   name list in a 
133d0 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  VIEW */.  int tn
133e0 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  um;            /
133f0 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67  * Root BTree pag
13400 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  e for this table
13410 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65   */.  u32 nTabRe
13420 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  f;         /* Nu
13430 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
13440 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a   to this Table *
13450 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61 67 73  /.  u32 tabFlags
13460 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
13470 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
13480 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
13490 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
134a0 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
134b0 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
134c0 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20   the rowid */.  
134d0 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  i16 nCol;       
134e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
134f0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
13500 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67  s table */.  Log
13510 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20  Est nRowLogEst; 
13520 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
13530 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
13540 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
13550 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   table */.  LogE
13560 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20  st szTabRow;    
13570 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
13580 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65  ze of each table
13590 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f   row in bytes */
135a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
135b0 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20  NABLE_COSTMULT. 
135c0 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74   LogEst costMult
135d0 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75  ;     /* Cost mu
135e0 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69  ltiplier for usi
135f0 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
13600 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79  .#endif.  u8 key
13610 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  Conf;          /
13620 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20  * What to do in 
13630 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65  case of uniquene
13640 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69  ss conflict on i
13650 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  PKey */.#ifndef 
13660 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
13670 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64  RTABLE.  int add
13680 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a  ColOffset;    /*
13690 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54   Offset in CREAT
136a0 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20  E TABLE stmt to 
136b0 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
136c0 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
136d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
136e0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
136f0 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20  t nModuleArg;   
13700 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13710 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
13720 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61   module */.  cha
13730 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b  r **azModuleArg;
13740 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31    /* 0: module 1
13750 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62  : schema 2: vtab
13760 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73   name 3...: args
13770 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56   */.  VTable *pV
13780 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69  Table;     /* Li
13790 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a  st of VTable obj
137a0 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ects. */.#endif.
137b0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
137c0 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ger;   /* List o
137d0 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65  f triggers store
137e0 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a  d in pSchema */.
137f0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
13800 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
13810 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
13820 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  his table */.  T
13830 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69  able *pNextZombi
13840 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74  e;  /* Next on t
13850 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65  he Parse.pZombie
13860 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  Tab list */.};..
13870 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
13880 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74  lues for Table.t
13890 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54  abFlags..**.** T
138a0 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c  F_OOOHidden appl
138b0 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72  ies to tables or
138c0 20 76 69 65 77 20 74 68 61 74 20 68 61 76 65 20   view that have 
138d0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74  hidden columns t
138e0 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f  hat are.** follo
138f0 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65  wed by non-hidde
13900 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d  n columns.  Exam
13910 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56 49  ple:  "CREATE VI
13920 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53  RTUAL TABLE x US
13930 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48  ING.** vtab1(a H
13940 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69  IDDEN, b);".  Si
13950 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e  nce "b" is a non
13960 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62  -hidden column b
13970 75 74 20 22 61 22 20 69 73 20 68 69 64 64 65 6e  ut "a" is hidden
13980 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48  ,.** the TF_OOOH
13990 69 64 64 65 6e 20 61 74 74 72 69 62 75 74 65 20  idden attribute 
139a0 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74  would apply in t
139b0 68 69 73 20 63 61 73 65 2e 20 20 53 75 63 68 20  his case.  Such 
139c0 74 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a  tables require.*
139d0 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69  * special handli
139e0 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54  ng during INSERT
139f0 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a   processing..*/.
13a00 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f  #define TF_Reado
13a10 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 30 30  nly        0x000
13a20 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c  1    /* Read-onl
13a30 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a  y system table *
13a40 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68  /.#define TF_Eph
13a50 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30  emeral       0x0
13a60 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  002    /* An eph
13a70 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
13a80 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
13a90 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 30 30  imaryKey   0x000
13aa0 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61  4    /* Table ha
13ab0 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
13ac0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75  */.#define TF_Au
13ad0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78  toincrement   0x
13ae0 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67  0008    /* Integ
13af0 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69  er primary key i
13b00 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  s autoincrement 
13b10 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
13b20 73 53 74 61 74 31 20 20 20 20 20 20 20 20 30 78  sStat1        0x
13b30 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c  0010    /* nRowL
13b40 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73  ogEst set from s
13b50 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23  qlite_stat1 */.#
13b60 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75  define TF_Withou
13b70 74 52 6f 77 69 64 20 20 20 20 30 78 30 30 32 30  tRowid    0x0020
13b80 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e      /* No rowid.
13b90 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73    PRIMARY KEY is
13ba0 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66   the key */.#def
13bb0 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  ine TF_NoVisible
13bc0 52 6f 77 69 64 20 20 30 78 30 30 34 30 20 20 20  Rowid  0x0040   
13bd0 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69   /* No user-visi
13be0 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75  ble "rowid" colu
13bf0 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  mn */.#define TF
13c00 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20  _OOOHidden      
13c10 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75   0x0080    /* Ou
13c20 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65  t-of-Order hidde
13c30 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65  n columns */.#de
13c40 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65  fine TF_StatsUse
13c50 64 20 20 20 20 20 20 20 30 78 30 31 30 30 20 20  d       0x0100  
13c60 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e    /* Query plann
13c70 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66  er decisions aff
13c80 65 63 74 65 64 20 62 79 0a 20 20 20 20 20 20 20  ected by.       
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
13cb0 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45   Index.aiRowLogE
13cc0 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23  st[] values */.#
13cd0 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74  define TF_HasNot
13ce0 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30  Null      0x0200
13cf0 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20      /* Contains 
13d00 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
13d10 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
13d20 54 46 5f 53 68 61 64 6f 77 20 20 20 20 20 20 20  TF_Shadow       
13d30 20 20 20 30 78 30 34 30 30 20 20 20 20 2f 2a 20     0x0400    /* 
13d40 54 72 75 65 20 66 6f 72 20 61 20 73 68 61 64 6f  True for a shado
13d50 77 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a  w table */../*.*
13d60 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
13d70 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
13d80 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
13d90 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
13da0 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
13db0 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
13dc0 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
13dd0 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
13de0 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
13df0 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
13e00 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
13e10 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
13e20 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
13e30 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
13e40 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
13e50 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29  (X)->nModuleArg)
13e60 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
13e70 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
13e80 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     0.#endif../*.
13e90 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
13ea0 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75  ermine if a colu
13eb0 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49  mn is hidden.  I
13ec0 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
13ed0 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20  olumn().** only 
13ee0 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69  works for non-vi
13ef0 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72  rtual tables (or
13f00 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e  dinary tables an
13f10 64 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a  d views) and is.
13f20 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20  ** always false 
13f30 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e  unless SQLITE_EN
13f40 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
13f50 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20  MNS is defined. 
13f60 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e   The.** IsHidden
13f70 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69  Column() macro i
13f80 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73  s general purpos
13f90 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  e..*/.#if define
13fa0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
13fb0 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a  HIDDEN_COLUMNS).
13fc0 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
13fd0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
13fe0 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c      (((X)->colFl
13ff0 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
14000 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66  DDEN)!=0).#  def
14010 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
14020 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
14030 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
14040 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
14050 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  =0).#elif !defin
14060 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
14070 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20  IRTUALTABLE).#  
14080 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
14090 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
140a0 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
140b0 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
140c0 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  N)!=0).#  define
140d0 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
140e0 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c  nColumn(X) 0.#el
140f0 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  se.#  define IsH
14100 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
14110 20 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69         0.#  defi
14120 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
14130 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
14140 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20  endif.../* Does 
14150 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61  the table have a
14160 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
14170 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20  e HasRowid(X)   
14180 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
14190 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  s & TF_WithoutRo
141a0 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65  wid)==0).#define
141b0 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29   VisibleRowid(X)
141c0 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
141d0 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52   & TF_NoVisibleR
141e0 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  owid)==0)../*.**
141f0 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65   Each foreign ke
14200 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  y constraint is 
14210 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
14220 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
14230 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ucture..**.** A 
14240 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61  foreign key is a
14250 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
14260 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  wo tables.  The 
14270 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a  "from" table is.
14280 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  ** the table tha
14290 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52  t contains the R
142a0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
142b0 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68   that creates th
142c0 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
142d0 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c  .  The "to" tabl
142e0 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74  e is the table t
142f0 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20  hat is named in 
14300 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
14310 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64  lause..** Consid
14320 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a  er this example:
14330 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
14340 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20  E TABLE ex1(.** 
14350 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20        a INTEGER 
14360 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20  PRIMARY KEY,.** 
14370 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20        b INTEGER 
14380 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52  CONSTRAINT fk1 R
14390 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29  EFERENCES ex2(x)
143a0 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a  .**     );.**.**
143b0 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79   For foreign key
143c0 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d   "fk1", the from
143d0 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20  -table is "ex1" 
143e0 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65  and the to-table
143f0 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71   is "ex2"..** Eq
14400 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a  uivalent names:.
14410 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74  **.**     from-t
14420 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61  able == child-ta
14430 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d  ble.**       to-
14440 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d  table == parent-
14450 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68  table.**.** Each
14460 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
14470 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20  se generates an 
14480 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
14490 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
144a0 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20  ure.** which is 
144b0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
144c0 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65  from-table.  The
144d0 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e   to-table need n
144e0 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a  ot exist when.**
144f0 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
14500 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65  is created.  The
14510 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68   existence of th
14520 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f  e to-table is no
14530 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a  t checked..**.**
14540 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c   The list of all
14550 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69   parents for chi
14560 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65  ld Table X is he
14570 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a  ld at X.pFKey..*
14580 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61  *.** A list of a
14590 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20  ll children for 
145a0 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20  a table named Z 
145b0 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74  (which might not
145c0 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20   even exist).** 
145d0 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d  is held in Schem
145e0 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20  a.fkeyHash with 
145f0 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e  a hash key of Z.
14600 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20  .*/.struct FKey 
14610 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d  {.  Table *pFrom
14620 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63  ;     /* Table c
14630 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45  ontaining the RE
14640 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
14650 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a  (aka: Child) */.
14660 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f    FKey *pNextFro
14670 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79  m;  /* Next FKey
14680 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69   with the same i
14690 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61  n pFrom. Next pa
146a0 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f  rent of pFrom */
146b0 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20  .  char *zTo;   
146c0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
146d0 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b  table that the k
146e0 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b  ey points to (ak
146f0 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20  a: Parent) */.  
14700 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20  FKey *pNextTo;  
14710 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74    /* Next with t
14720 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78  he same zTo. Nex
14730 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20  t child of zTo. 
14740 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76  */.  FKey *pPrev
14750 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f  To;    /* Previo
14760 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  us with the same
14770 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43   zTo */.  int nC
14780 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
14790 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
147a0 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a   in this key */.
147b0 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33    /* EV: R-30323
147c0 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69  -21917 */.  u8 i
147d0 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20  sDeferred;      
147e0 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
147f0 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20  traint checking 
14800 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c  is deferred till
14810 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20   COMMIT */.  u8 
14820 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20  aAction[2];     
14830 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20     /* ON DELETE 
14840 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63  and ON UPDATE ac
14850 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76  tions, respectiv
14860 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ely */.  Trigger
14870 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f   *apTrigger[2];/
14880 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61  * Triggers for a
14890 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73  Action[] actions
148a0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f   */.  struct sCo
148b0 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d  lMap {      /* M
148c0 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e  apping of column
148d0 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f  s in pFrom to co
148e0 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a  lumns in zTo */.
148f0 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20      int iFrom;  
14900 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
14910 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  ex of column in 
14920 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61  pFrom */.    cha
14930 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20  r *zCol;        
14940 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f     /* Name of co
14950 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66  lumn in zTo.  If
14960 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52   NULL use PRIMAR
14970 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f  Y KEY */.  } aCo
14980 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  l[1];           
14990 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
149a0 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63  r each of nCol c
149b0 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  olumns */.};../*
149c0 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f  .** SQLite suppo
149d0 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65  rts many differe
149e0 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c  nt ways to resol
149f0 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a  ve a constraint.
14a00 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42  ** error.  ROLLB
14a10 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ACK processing m
14a20 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73  eans that a cons
14a30 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
14a40 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f  .** causes the o
14a50 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
14a60 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20  ess to fail and 
14a70 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
14a80 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74  transaction.** t
14a90 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
14aa0 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73  .  ABORT process
14ab0 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70  ing means the op
14ac0 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
14ad0 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20  ss.** fails and 
14ae0 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65  any prior change
14af0 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20  s from that one 
14b00 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61  operation are ba
14b10 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74  cked out,.** but
14b20 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
14b30 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62   is not rolled b
14b40 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65  ack.  FAIL proce
14b50 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
14b60 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f  .** the operatio
14b70 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74  n in progress st
14b80 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ops and returns 
14b90 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20  an error code.  
14ba0 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61  But prior.** cha
14bb0 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20  nges due to the 
14bc0 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61  same operation a
14bd0 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75  re not backed ou
14be0 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63  t and no rollbac
14bf0 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47  k.** occurs.  IG
14c00 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20  NORE means that 
14c10 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72  the particular r
14c20 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74  ow that caused t
14c30 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a  he constraint.**
14c40 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e   error is not in
14c50 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
14c60 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
14c70 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
14c80 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75  error.** is retu
14c90 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d  rned.  REPLACE m
14ca0 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69  eans that preexi
14cb0 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72  sting database r
14cc0 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a  ows that caused.
14cd0 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ** a UNIQUE cons
14ce0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
14cf0 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20   are removed so 
14d00 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73  that the new ins
14d10 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65  ert or.** update
14d20 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50   can proceed.  P
14d30 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
14d40 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
14d50 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   is reported..**
14d60 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45  .** RESTRICT, SE
14d70 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41  TNULL, and CASCA
14d80 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79  DE actions apply
14d90 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e   only to foreign
14da0 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49   keys..** RESTRI
14db0 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  CT is the same a
14dc0 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45  s ABORT for IMME
14dd0 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65  DIATE foreign ke
14de0 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61  ys and the.** sa
14df0 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66  me as ROLLBACK f
14e00 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73  or DEFERRED keys
14e10 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73  .  SETNULL means
14e20 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67   that the foreig
14e30 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20  n.** key is set 
14e40 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44  to NULL.  CASCAD
14e50 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44  E means that a D
14e60 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
14e70 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65  of the.** refere
14e80 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69  nced table row i
14e90 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74  s propagated int
14ea0 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68  o the row that h
14eb0 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65  olds the.** fore
14ec0 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  ign key..**.** T
14ed0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
14ee0 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
14ef0 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
14f00 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
14f10 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
14f20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
14f30 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
14f40 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
14f50 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
14f60 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
14f70 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
14f80 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
14f90 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
14fa0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
14fb0 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
14fc0 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
14fd0 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
14fe0 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
14ff0 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
15000 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
15010 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
15020 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
15030 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
15040 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
15050 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
15060 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
15070 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
15080 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
15090 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
150a0 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
150b0 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
150c0 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
150d0 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
150e0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
150f0 20 4f 45 5f 55 70 64 61 74 65 20 20 20 36 20 20   OE_Update   6  
15100 20 2f 2a 20 50 72 6f 63 65 73 73 20 61 73 20 61   /* Process as a
15110 20 44 4f 20 55 50 44 41 54 45 20 69 6e 20 61 6e   DO UPDATE in an
15120 20 75 70 73 65 72 74 20 2a 2f 0a 23 64 65 66 69   upsert */.#defi
15130 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 37  ne OE_Restrict 7
15140 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66     /* OE_Abort f
15150 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45  or IMMEDIATE, OE
15160 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45  _Rollback for DE
15170 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e  FERRED */.#defin
15180 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20  e OE_SetNull  8 
15190 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
151a0 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
151b0 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  o NULL */.#defin
151c0 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 39 20  e OE_SetDflt  9 
151d0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
151e0 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
151f0 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f  o its default */
15200 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63  .#define OE_Casc
15210 61 64 65 20 20 31 30 20 20 2f 2a 20 43 61 73 63  ade  10  /* Casc
15220 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20  ade the changes 
15230 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  */.#define OE_De
15240 66 61 75 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f  fault  11  /* Do
15250 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
15260 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
15270 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
15280 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
15290 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
152a0 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
152b0 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
152c0 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
152d0 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
152e0 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
152f0 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  trol the.** comp
15300 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77  arison of the tw
15310 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a  o index keys..**
15320 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53  .** Note that aS
15330 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61  ortOrder[] and a
15340 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65  Coll[] have nFie
15350 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65  ld+1 slots.  The
15360 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64  re.** are nField
15370 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63   slots for the c
15380 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64  olumns of an ind
15390 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72  ex then one extr
153a0 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68  a slot.** for th
153b0 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65  e rowid at the e
153c0 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65  nd..*/.struct Ke
153d0 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52  yInfo {.  u32 nR
153e0 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ef;           /*
153f0 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72   Number of refer
15400 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65  ences to this Ke
15410 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a  yInfo object */.
15420 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
15430 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
15440 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20  coding - one of 
15450 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20  the SQLITE_UTF* 
15460 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
15470 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20  nKeyField;      
15480 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79  /* Number of key
15490 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
154a0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e  index */.  u16 n
154b0 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f  AllField;      /
154c0 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c  * Total columns,
154d0 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70   including key p
154e0 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20  lus others */.  
154f0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
15500 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
15510 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a  ase connection *
15520 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
15530 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20  er;     /* Sort 
15540 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63  order for each c
15550 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c  olumn. */.  Coll
15560 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20  Seq *aColl[1];  
15570 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
15580 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74  uence for each t
15590 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a  erm of the key *
155a0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
155b0 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20   object holds a 
155c0 72 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73  record which has
155d0 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74   been parsed out
155e0 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c   into individual
155f0 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20  .** fields, for 
15600 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
15610 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73  doing a comparis
15620 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f  on..**.** A reco
15630 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20  rd is an object 
15640 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  that contains on
15650 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73  e or more fields
15660 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63   of data..** Rec
15670 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f  ords are used to
15680 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65   store the conte
15690 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f  nt of a table ro
156a0 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a  w and to store.*
156b0 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20  * the key of an 
156c0 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65  index.  A blob e
156d0 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63  ncoding of a rec
156e0 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62  ord is created b
156f0 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65  y.** the OP_Make
15700 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66  Record opcode of
15710 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73   the VDBE and is
15720 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79   disassembled by
15730 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d   the.** OP_Colum
15740 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  n opcode..**.** 
15750 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
15760 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65  his object serve
15770 73 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72  s as a "key" for
15780 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20   doing a search 
15790 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62  on.** an index b
157a0 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20  +tree. The goal 
157b0 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73  of the search is
157c0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74   to find the ent
157d0 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c  ry that.** is cl
157e0 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20  osed to the key 
157f0 64 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69  described by thi
15800 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20  s object.  This 
15810 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c  object might hol
15820 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66  d.** just a pref
15830 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20  ix of the key.  
15840 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69  The number of fi
15850 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79  elds is given by
15860 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  .** pKeyInfo->nF
15870 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
15880 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73  r1 and r2 fields
15890 20 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20   are the values 
158a0 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69  to return if thi
158b0 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  s key is less th
158c0 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72  an.** or greater
158d0 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74   than a key in t
158e0 68 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63  he btree, respec
158f0 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61  tively.  These a
15900 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d  re normally.** -
15910 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74  1 and +1 respect
15920 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74  ively, but might
15930 20 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20   be inverted to 
15940 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65  +1 and -1 if the
15950 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e   b-tree.** is in
15960 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a   DESC order..**.
15970 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61  ** The key compa
15980 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  rison functions 
15990 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20  actually return 
159a0 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20  default_rc when 
159b0 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20  they find.** an 
159c0 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f  equals compariso
159d0 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63  n.  default_rc c
159e0 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20  an be -1, 0, or 
159f0 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  +1.  If there ar
15a00 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e  e.** multiple en
15a10 74 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74  tries in the b-t
15a20 72 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ree with the sam
15a30 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79  e key (when only
15a40 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74   looking.** at t
15a50 68 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66  he first pKeyInf
15a60 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65  o->nFields,) the
15a70 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e  n default_rc can
15a80 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f   be set to -1 to
15a90 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65  .** cause the se
15aa0 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65  arch to find the
15ab0 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20   last match, or 
15ac0 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  +1 to cause the 
15ad0 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e  search to.** fin
15ae0 64 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  d the first matc
15af0 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79  h..**.** The key
15b00 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63   comparison func
15b10 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65  tions will set e
15b20 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66  qSeen to true if
15b30 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65   they ever.** ge
15b40 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75  t and equal resu
15b50 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69  lts when compari
15b60 6e 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ng this structur
15b70 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65  e to a b-tree re
15b80 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65  cord..** When de
15b90 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65  fault_rc!=0, the
15ba0 20 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e   search might en
15bb0 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f  d up on the reco
15bc0 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a  rd immediately.*
15bd0 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72  * before the fir
15be0 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65  st match or imme
15bf0 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68  diately after th
15c00 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54  e last match.  T
15c10 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65  he.** eqSeen fie
15c20 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65  ld will indicate
15c30 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
15c40 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65  an exact match e
15c50 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20  xists in the.** 
15c60 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63  b-tree..*/.struc
15c70 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
15c80 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b   {.  KeyInfo *pK
15c90 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c  eyInfo;  /* Coll
15ca0 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f  ation and sort-o
15cb0 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  rder information
15cc0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
15cd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
15ce0 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
15cf0 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
15d00 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
15d10 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a  s in apMem[] */.
15d20 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b    i8 default_rc;
15d30 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69        /* Compari
15d40 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65  son result if ke
15d50 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a  ys are equal */.
15d60 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20    u8 errCode;   
15d70 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64        /* Error d
15d80 65 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f  etected by xReco
15d90 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55  rdCompare (CORRU
15da0 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a  PT or NOMEM) */.
15db0 20 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20    i8 r1;        
15dc0 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
15dd0 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73  o return if (lhs
15de0 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20   < rhs) */.  i8 
15df0 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r2;             
15e00 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
15e10 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68  urn if (lhs > rh
15e20 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65  s) */.  u8 eqSee
15e30 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
15e40 72 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69  rue if an equali
15e50 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61  ty comparison ha
15e60 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d  s been seen */.}
15e70 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  ;.../*.** Each S
15e80 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
15e90 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
15ea0 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
15eb0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
15ec0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
15ed0 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
15ee0 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
15ef0 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
15f00 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
15f10 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
15f20 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
15f30 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
15f40 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
15f50 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
15f60 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
15f70 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
15f80 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
15f90 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
15fa0 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
15fb0 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
15fc0 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
15fd0 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
15fe0 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
15ff0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
16000 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
16010 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
16020 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
16030 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
16040 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
16050 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
16060 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
16070 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
16080 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
16090 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
160a0 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
160b0 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
160c0 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
160d0 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
160e0 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  se the.** first 
160f0 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
16100 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e  exed (c3) has an
16110 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45   index of 2 in E
16120 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68  x1.aCol[]..** Th
16130 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20  e second column 
16140 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
16150 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  1) has an index 
16160 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61  of 0 in.** Ex1.a
16170 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32  Col[], hence Ex2
16180 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e  .aiColumn[1]==0.
16190 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78  .**.** The Index
161a0 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64  .onError field d
161b0 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65  etermines whethe
161c0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64  r or not the ind
161d0 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  exed columns.** 
161e0 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61  must be unique a
161f0 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66  nd what to do if
16200 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20   they are not.  
16210 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72  When Index.onErr
16220 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69  or=OE_None,.** i
16230 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20  t means this is 
16240 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64  not a unique ind
16250 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69  ex.  Otherwise i
16260 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e  t is a unique in
16270 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  dex.** and the v
16280 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e  alue of Index.on
16290 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74  Error indicate t
162a0 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63  he which conflic
162b0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20  t resolution.** 
162c0 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70  algorithm to emp
162d0 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20  loy whenever an 
162e0 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
162f0 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d  to insert a non-
16300 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e  unique.** elemen
16310 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70  t..**.** While p
16320 61 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20  arsing a CREATE 
16330 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20  TABLE or CREATE 
16340 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20  INDEX statement 
16350 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
16360 65 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64  enerate VDBE cod
16370 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f  e (as opposed to
16380 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61   parsing one rea
16390 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65  d from an sqlite
163a0 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65  _master.** table
163b0 20 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73   as part of pars
163c0 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ing an existing 
163d0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29  database schema)
163e0 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74  , transient inst
163f0 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73  ances.** of this
16400 20 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62   structure may b
16410 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68  e created. In th
16420 69 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65  is case the Inde
16430 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20  x.tnum variable 
16440 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  is.** used to st
16450 6f 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20  ore the address 
16460 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75  of a VDBE instru
16470 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74  ction, not a dat
16480 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75  abase page.** nu
16490 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20  mber (it cannot 
164a0 2d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  - the database p
164b0 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63  age is not alloc
164c0 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56  ated until the V
164d0 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69  DBE.** program i
164e0 73 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65  s executed). See
164f0 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75   convertToWithou
16500 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f  tRowidTable() fo
16510 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74  r details..*/.st
16520 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63  ruct Index {.  c
16530 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
16540 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
16550 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
16560 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e  .  i16 *aiColumn
16570 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
16580 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65  hich columns are
16590 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e   used by this in
165a0 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a  dex.  1st is 0 *
165b0 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f  /.  LogEst *aiRo
165c0 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20  wLogEst;     /* 
165d0 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73  From ANALYZE: Es
165e0 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64  t. rows selected
165f0 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   by each column 
16600 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
16610 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
16620 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62   The SQL table b
16630 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a  eing indexed */.
16640 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
16650 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
16660 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
16670 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
16680 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
16690 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20  ndex *pNext;    
166a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
166b0 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ext index associ
166c0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61  ated with the sa
166d0 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63  me table */.  Sc
166e0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
166f0 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
16700 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73   containing this
16710 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a   index */.  u8 *
16720 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
16730 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68       /* for each
16740 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44   column: True==D
16750 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20  ESC, False==ASC 
16760 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
16770 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  **azColl;     /*
16780 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74   Array of collat
16790 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d  ion sequence nam
167a0 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a  es for index */.
167b0 20 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78    Expr *pPartIdx
167c0 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48  Where;     /* WH
167d0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70  ERE clause for p
167e0 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a  artial indices *
167f0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43  /.  ExprList *aC
16800 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20  olExpr;      /* 
16810 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  Column expressio
16820 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  ns */.  int tnum
16830 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16840 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74   /* DB Page cont
16850 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74  aining root of t
16860 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c  his index */.  L
16870 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20  ogEst szIdxRow; 
16880 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
16890 61 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77  ated average row
168a0 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a   size in bytes *
168b0 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b  /.  u16 nKeyCol;
168c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
168d0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
168e0 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65  s forming the ke
168f0 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75  y */.  u16 nColu
16900 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
16910 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
16920 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74  umns stored in t
16930 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  he index */.  u8
16940 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20   onError;       
16950 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f         /* OE_Abo
16960 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f  rt, OE_Ignore, O
16970 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45  E_Replace, or OE
16980 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67  _None */.  unsig
16990 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20  ned idxType:2;  
169a0 20 20 20 20 2f 2a 20 30 3a 4e 6f 72 6d 61 6c 20      /* 0:Normal 
169b0 31 3a 55 4e 49 51 55 45 2c 20 32 3a 50 52 49 4d  1:UNIQUE, 2:PRIM
169c0 41 52 59 20 4b 45 59 2c 20 33 3a 49 50 4b 20 2a  ARY KEY, 3:IPK *
169d0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
169e0 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
169f0 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
16a00 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
16a10 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
16a20 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
16a30 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
16a40 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
16a50 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
16a60 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
16a70 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
16a80 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
16a90 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
16aa0 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
16ab0 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
16ac0 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
16ad0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
16ae0 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
16af0 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ndex */.  unsign
16b00 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b  ed noSkipScan:1;
16b10 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79     /* Do not try
16b20 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61   to use skip-sca
16b30 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  n if true */.  u
16b40 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61 74 31  nsigned hasStat1
16b50 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77  :1;     /* aiRow
16b60 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f  LogEst values co
16b70 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73  me from sqlite_s
16b80 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tat1 */.  unsign
16b90 65 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20  ed bNoQuery:1;  
16ba0 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65     /* Do not use
16bb0 20 74 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f   this index to o
16bc0 70 74 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20  ptimize queries 
16bd0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
16be0 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
16bf0 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61  _STAT4.  int nSa
16c00 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  mple;           
16c10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
16c20 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70  lements in aSamp
16c30 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  le[] */.  int nS
16c40 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20  ampleCol;       
16c50 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e     /* Size of In
16c60 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d  dexSample.anEq[]
16c70 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20   and so on */.  
16c80 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b  tRowcnt *aAvgEq;
16c90 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72           /* Aver
16ca0 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66  age nEq values f
16cb0 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61  or keys not in a
16cc0 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
16cd0 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
16ce0 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
16cf0 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
16d00 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e   key */.  tRowcn
16d10 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20  t *aiRowEst;    
16d20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
16d30 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61  thmic stat1 data
16d40 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20   for this index 
16d50 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f  */.  tRowcnt nRo
16d60 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a  wEst0;        /*
16d70 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
16d80 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
16d90 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
16da0 23 65 6e 64 69 66 0a 20 20 42 69 74 6d 61 73 6b  #endif.  Bitmask
16db0 20 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20 20 20   colNotIdxed;   
16dc0 20 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69 6e 64    /* 0 for unind
16dd0 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  exed columns in 
16de0 70 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  pTab */.};../*.*
16df0 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
16e00 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79   for Index.idxTy
16e10 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  pe.*/.#define SQ
16e20 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50  LITE_IDXTYPE_APP
16e30 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20  DEF      0   /* 
16e40 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  Created using CR
16e50 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
16e60 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
16e70 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20  TYPE_UNIQUE     
16e80 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e   1   /* Implemen
16e90 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ts a UNIQUE cons
16ea0 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
16eb0 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
16ec0 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20  _PRIMARYKEY  2  
16ed0 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41   /* Is the PRIMA
16ee0 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74  RY KEY for the t
16ef0 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
16f00 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 49  SQLITE_IDXTYPE_I
16f10 50 4b 20 20 20 20 20 20 20 20 20 33 20 20 20 2f  PK         3   /
16f20 2a 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  * INTEGER PRIMAR
16f30 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 0a  Y KEY index */..
16f40 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
16f50 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50  f index X is a P
16f60 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78  RIMARY KEY index
16f70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72   */.#define IsPr
16f80 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29  imaryKeyIndex(X)
16f90 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d    ((X)->idxType=
16fa0 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f  =SQLITE_IDXTYPE_
16fb0 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20  PRIMARYKEY)../* 
16fc0 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
16fd0 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51  ndex X is a UNIQ
16fe0 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  UE index */.#def
16ff0 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65  ine IsUniqueInde
17000 78 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  x(X)      ((X)->
17010 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65  onError!=OE_None
17020 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e  )../* The Index.
17030 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65  aiColumn[] value
17040 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70  s are normally p
17050 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e  ositive integer.
17060 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61    But.** there a
17070 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65  re some negative
17080 20 76 61 6c 75 65 73 20 74 68 61 74 20 68 61 76   values that hav
17090 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
170a0 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e  g:.*/.#define XN
170b0 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20  _ROWID     (-1) 
170c0 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63      /* Indexed c
170d0 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77  olumn is the row
170e0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e  id */.#define XN
170f0 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32 29 20  _EXPR      (-2) 
17100 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63      /* Indexed c
17110 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72  olumn is an expr
17120 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ession */../*.**
17130 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f   Each sample sto
17140 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
17150 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
17160 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
17170 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20  memory.** using 
17180 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74  a structure of t
17190 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64  his type.  See d
171a0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20  ocumentation at 
171b0 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a  the top of the.*
171c0 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72  * analyze.c sour
171d0 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69  ce file for addi
171e0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
171f0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  on..*/.struct In
17200 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f  dexSample {.  vo
17210 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20  id *p;          
17220 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61  /* Pointer to sa
17230 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a  mpled record */.
17240 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
17250 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72      /* Size of r
17260 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a  ecord in bytes *
17270 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45  /.  tRowcnt *anE
17280 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  q;    /* Est. nu
17290 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
172a0 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c  re the key equal
172b0 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  s this sample */
172c0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74  .  tRowcnt *anLt
172d0 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
172e0 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
172f0 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  e key is less th
17300 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
17310 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44  /.  tRowcnt *anD
17320 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  Lt;   /* Est. nu
17330 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74  mber of distinct
17340 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20   keys less than 
17350 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d  this sample */.}
17360 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  ;../*.** Possibl
17370 65 20 76 61 6c 75 65 73 20 74 6f 20 75 73 65 20  e values to use 
17380 77 69 74 68 69 6e 20 74 68 65 20 66 6c 61 67 73  within the flags
17390 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
173a0 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 29 2e 0a  ite3GetToken()..
173b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
173c0 45 5f 54 4f 4b 45 4e 5f 51 55 4f 54 45 44 20 20  E_TOKEN_QUOTED  
173d0 20 20 30 78 31 20 2f 2a 20 54 6f 6b 65 6e 20 69    0x1 /* Token i
173e0 73 20 61 20 71 75 6f 74 65 64 20 69 64 65 6e 74  s a quoted ident
173f0 69 66 69 65 72 2e 20 2a 2f 0a 23 64 65 66 69 6e  ifier. */.#defin
17400 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b  e SQLITE_TOKEN_K
17410 45 59 57 4f 52 44 20 20 20 30 78 32 20 2f 2a 20  EYWORD   0x2 /* 
17420 54 6f 6b 65 6e 20 69 73 20 61 20 6b 65 79 77 6f  Token is a keywo
17430 72 64 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  rd. */../*.** Ea
17440 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20  ch token coming 
17450 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72  out of the lexer
17460 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
17470 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63  of.** this struc
17480 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72  ture.  Tokens ar
17490 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70  e also used as p
174a0 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73  art of an expres
174b0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
174c0 6d 65 6d 6f 72 79 20 74 68 61 74 20 22 7a 22 20  memory that "z" 
174d0 70 6f 69 6e 74 73 20 74 6f 20 69 73 20 6f 77 6e  points to is own
174e0 65 64 20 62 79 20 6f 74 68 65 72 20 6f 62 6a 65  ed by other obje
174f0 63 74 73 2e 20 20 54 61 6b 65 20 63 61 72 65 0a  cts.  Take care.
17500 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 77 6e 65  ** that the owne
17510 72 20 6f 66 20 74 68 65 20 22 7a 22 20 73 74 72  r of the "z" str
17520 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20 64 65 61  ing does not dea
17530 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 74 72 69  llocate the stri
17540 6e 67 20 62 65 66 6f 72 65 0a 2a 2a 20 74 68 65  ng before.** the
17550 20 54 6f 6b 65 6e 20 67 6f 65 73 20 6f 75 74 20   Token goes out 
17560 6f 66 20 73 63 6f 70 65 21 20 20 56 65 72 79 20  of scope!  Very 
17570 6f 66 74 65 6e 2c 20 74 68 65 20 22 7a 22 20 70  often, the "z" p
17580 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 20 70 6c  oints to some pl
17590 61 63 65 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 69  ace.** in the mi
175a0 64 64 6c 65 20 6f 66 20 74 68 65 20 50 61 72 73  ddle of the Pars
175b0 65 2e 7a 53 71 6c 20 74 65 78 74 2e 20 20 42 75  e.zSql text.  Bu
175c0 74 20 69 74 20 6d 69 67 68 74 20 61 6c 73 6f 20  t it might also 
175d0 70 6f 69 6e 74 20 74 6f 20 61 0a 2a 2a 20 73 74  point to a.** st
175e0 61 74 69 63 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  atic string..*/.
175f0 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
17600 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
17610 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
17620 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
17630 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
17640 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
17650 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
17660 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
17670 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
17680 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
17690 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
176a0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
176b0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
176c0 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
176d0 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
176e0 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
176f0 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
17700 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
17710 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
17720 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
17730 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
17740 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
17750 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
17760 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
17770 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
17780 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
17790 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
177a0 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
177b0 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
177c0 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
177d0 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
177e0 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
177f0 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
17800 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
17810 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
17820 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
17830 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
17840 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
17850 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
17860 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
17870 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
17880 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
17890 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
178a0 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
178b0 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
178c0 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
178d0 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
178e0 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
178f0 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
17900 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
17910 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
17920 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
17930 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17950 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
17960 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
17970 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
17980 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
17990 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
179a0 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
179b0 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
179c0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
179d0 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179f0 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
17a00 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
17a10 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
17a20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
17a30 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
17a40 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
17a50 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
17a60 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
17a70 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
17a80 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
17a90 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
17aa0 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
17ab0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
17ac0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
17ad0 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67  x */.  int mnReg
17ae0 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f  , mxReg;       /
17af0 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73  * Range of regis
17b00 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ters allocated f
17b10 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e  or aCol and aFun
17b20 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  c */.  ExprList 
17b30 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
17b40 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
17b50 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
17b60 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
17b70 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
17b80 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
17b90 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
17ba0 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
17bc0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
17bd0 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
17be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
17bf0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
17c00 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
17c10 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
17c20 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
17c30 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
17c40 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
17c50 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
17c60 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
17c70 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
17c80 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
17c90 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
17ca0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cc0 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
17cd0 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
17ce0 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
17cf0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
17d00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
17d10 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
17d20 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
17d30 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
17d40 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
17d50 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
17d60 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
17d70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
17d80 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
17d90 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
17da0 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
17db0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
17dc0 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17de0 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
17df0 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
17e00 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
17e10 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17e30 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
17e40 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
17e50 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
17e60 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
17e70 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17e80 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
17e90 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
17ea0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
17eb0 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
17ec0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
17ed0 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
17ee0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
17ef0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
17f00 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
17f10 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17f30 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
17f40 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
17f50 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
17f60 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
17f70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
17f80 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
17f90 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
17fa0 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
17fb0 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
17fc0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
17fd0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
17fe0 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
17ff0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
18000 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
18010 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
18020 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
18030 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
18040 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
18050 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
18060 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
18070 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
18080 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
18090 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
180a0 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
180b0 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
180c0 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
180d0 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
180e0 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
180f0 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
18100 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
18110 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
18120 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
18130 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
18140 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
18150 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
18160 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
18170 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
18180 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
18190 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
181a0 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
181b0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
181c0 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
181d0 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
181e0 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
181f0 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
18200 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
18210 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
18220 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
18230 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
18240 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
18250 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
18260 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
18270 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
18280 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
18290 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
182a0 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
182b0 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
182c0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
182d0 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
182e0 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
182f0 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
18300 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
18310 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
18320 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
18330 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
18340 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
18350 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
18360 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
18370 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
18380 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
18390 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
183a0 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
183b0 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
183c0 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
183d0 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
183e0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
183f0 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
18400 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
18410 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
18420 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
18430 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
18440 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
18450 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
18460 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
18470 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
18480 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
18490 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
184a0 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
184b0 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
184c0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
184d0 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61  ins the.** varia
184e0 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c  ble name. Finall
184f0 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73  y, if the expres
18500 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
18510 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43  unction (TK_FUNC
18520 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45  TION),.** then E
18530 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
18540 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
18550 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
18560 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61  ** Expr.pRight a
18570 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72  nd Expr.pLeft ar
18580 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
18590 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69  ight subexpressi
185a0 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61  ons of a.** bina
185b0 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74  ry operator. Eit
185c0 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20  her or both may 
185d0 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45  be NULL..**.** E
185e0 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61  xpr.x.pList is a
185f0 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
18600 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ts if the expres
18610 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
18620 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41  unction,.** a CA
18630 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  SE expression or
18640 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f   an IN expressio
18650 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c  n of the form "<
18660 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a  lhs> IN (<y>, <z
18670 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e  >...)"..** Expr.
18680 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65  x.pSelect is use
18690 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  d if the express
186a0 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
186b0 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73  ect or an expres
186c0 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66  sion of.** the f
186d0 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53  orm "<lhs> IN (S
186e0 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20  ELECT ...)". If 
186f0 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  the EP_xIsSelect
18700 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
18710 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
18720 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72   mask, then Expr
18730 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61  .x.pSelect is va
18740 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  lid. Otherwise, 
18750 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a  Expr.x.pList is.
18760 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20  ** valid..**.** 
18770 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  An expression of
18780 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20   the form ID or 
18790 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20  ID.ID refers to 
187a0 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61  a column in a ta
187b0 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68  ble..** For such
187c0 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78   expressions, Ex
187d0 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20  pr.op is set to 
187e0 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78  TK_COLUMN and Ex
187f0 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20  pr.iTable is.** 
18800 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73  the integer curs
18810 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56  or number of a V
18820 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  DBE cursor point
18830 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c  ing to that tabl
18840 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43  e and.** Expr.iC
18850 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c  olumn is the col
18860 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
18870 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75  he specific colu
18880 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65  mn.  If the.** e
18890 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65  xpression is use
188a0 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e  d as a result in
188b0 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45   an aggregate SE
188c0 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a  LECT, then the.*
188d0 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20  * value is also 
188e0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78  stored in the Ex
188f0 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69  pr.iAgg column i
18900 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  n the aggregate 
18910 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61  so that.** it ca
18920 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66  n be accessed af
18930 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74  ter all aggregat
18940 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e  es are computed.
18950 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
18960 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75  pression is an u
18970 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20  nbound variable 
18980 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69  marker (a questi
18990 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61  on mark.** chara
189a0 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20  cter '?' in the 
189b0 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68  original SQL) th
189c0 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62  en the Expr.iTab
189d0 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64  le holds the ind
189e0 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  ex.** number for
189f0 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
18a00 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
18a10 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
18a20 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
18a30 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
18a40 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
18a50 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
18a60 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
18a70 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
18a80 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
18a90 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
18aa0 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
18ab0 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
18ac0 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
18ad0 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
18ae0 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
18af0 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
18b00 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
18b10 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
18b20 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
18b30 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
18b40 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
18b50 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
18b60 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
18b70 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
18b80 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
18b90 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
18ba0 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
18bb0 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
18bc0 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
18bd0 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
18be0 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
18bf0 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
18c00 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
18c10 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
18c20 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
18c30 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
18c40 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
18c50 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
18c60 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
18c70 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
18c80 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
18c90 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
18ca0 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
18cb0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
18cc0 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
18cd0 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
18ce0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
18cf0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
18d00 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
18d10 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
18d20 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
18d30 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
18d40 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
18d50 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
18d60 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
18d70 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
18d80 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
18d90 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
18da0 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
18db0 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
18dc0 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
18dd0 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
18de0 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
18df0 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
18e00 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
18e10 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
18e20 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
18e30 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
18e40 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
18e50 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
18e60 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
18e70 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
18e80 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
18e90 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
18ea0 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
18eb0 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
18ec0 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
18ed0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
18ee0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
18ef0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
18f00 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
18f10 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
18f20 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
18f30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
18f40 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
18f50 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
18f60 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
18f70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
18f80 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
18f90 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
18fa0 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
18fb0 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20    u32 flags;    
18fc0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
18fd0 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
18fe0 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
18ff0 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
19000 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
19010 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
19020 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
19030 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
19040 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
19050 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
19060 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
19070 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
19080 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
19090 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
190a0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
190b0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
190c0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
190d0 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
190e0 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
190f0 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
19100 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
19110 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
19120 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
19130 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
19140 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
19150 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
19160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191a0 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
191b0 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
191c0 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
191d0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
191e0 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
191f0 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
19200 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
19210 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
19220 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
19230 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
19240 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
19250 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
19260 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
19270 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
19280 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
19290 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
192a0 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
192b0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
192c0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
192d0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
192e0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
192f0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
19300 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
19310 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
19320 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
19330 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
19340 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
19350 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
19360 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
19370 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
19380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193b0 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
193c0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
193d0 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
193e0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
193f0 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
19400 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
19410 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
19420 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
19430 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
19440 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
19450 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
19460 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19480 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
19490 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
194a0 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194c0 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
194d0 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
194e0 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
194f0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
19500 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34  P_Unlikely:  134
19510 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b  217728 times lik
19520 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20  elihood.        
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19540 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31   ** TK_SELECT: 1
19550 73 74 20 72 65 67 69 73 74 65 72 20 6f 66 20 72  st register of r
19560 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a  esult vector */.
19570 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
19580 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
19590 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
195a0 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
195b0 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
195d0 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
195e0 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
195f0 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20  ways >= 1)..    
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
19620 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  T_COLUMN: column
19630 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 76   of the result v
19640 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69  ector */.  i16 i
19650 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
19660 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
19670 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
19680 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
19690 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
196a0 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
196b0 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
196c0 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
196d0 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
196e0 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
196f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
19700 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61  EGISTER: origina
19710 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e  l value of Expr.
19720 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
19730 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19740 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61  K_COLUMN: the va
19750 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50  lue of p5 for OP
19760 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20  _Column.        
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19780 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   ** TK_AGG_FUNCT
19790 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70  ION: nesting dep
197a0 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  th */.  AggInfo 
197b0 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f  *pAggInfo;     /
197c0 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47  * Used by TK_AGG
197d0 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41  _COLUMN and TK_A
197e0 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20  GG_FUNCTION */. 
197f0 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 54 61 62   union {.    Tab
19800 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
19810 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
19820 3a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  : Table containi
19830 6e 67 20 63 6f 6c 75 6d 6e 2e 20 43 61 6e 20 62  ng column. Can b
19840 65 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20  e NULL.         
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d    ** for a colum
19870 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e  n of an index on
19880 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
19890 2f 0a 20 20 20 20 57 69 6e 64 6f 77 20 2a 70 57  /.    Window *pW
198a0 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  in;          /* 
198b0 54 4b 5f 46 55 4e 43 54 49 4f 4e 3a 20 57 69 6e  TK_FUNCTION: Win
198c0 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 20 66  dow definition f
198d0 6f 72 20 74 68 65 20 66 75 6e 63 20 2a 2f 0a 20  or the func */. 
198e0 20 20 20 73 74 72 75 63 74 20 7b 20 20 20 20 20     struct {     
198f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
19900 49 4e 2c 20 54 4b 5f 53 45 4c 45 43 54 2c 20 61  IN, TK_SELECT, a
19910 6e 64 20 54 4b 5f 45 58 49 53 54 53 20 2a 2f 0a  nd TK_EXISTS */.
19920 20 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 3b        int iAddr;
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19940 53 75 62 72 6f 75 74 69 6e 65 20 65 6e 74 72 79  Subroutine entry
19950 20 61 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20   address */.    
19960 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b    int regReturn;
19970 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
19980 73 74 65 72 20 75 73 65 64 20 74 6f 20 68 6f 6c  ster used to hol
19990 64 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  d return address
199a0 20 2a 2f 0a 20 20 20 20 7d 20 73 75 62 3b 0a 20   */.    } sub;. 
199b0 20 7d 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   } y;.};../*.** 
199c0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
199d0 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
199e0 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
199f0 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
19a00 2a 2a 20 56 61 6c 75 65 20 72 65 73 74 72 69 63  ** Value restric
19a10 74 69 6f 6e 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  tions:.**.**    
19a20 20 20 20 20 20 20 45 50 5f 41 67 67 20 3d 3d 20        EP_Agg == 
19a30 4e 43 5f 48 61 73 41 67 67 20 3d 3d 20 53 46 5f  NC_HasAgg == SF_
19a40 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 20 20  HasAgg.**       
19a50 20 20 20 45 50 5f 57 69 6e 20 3d 3d 20 4e 43 5f     EP_Win == NC_
19a60 48 61 73 57 69 6e 0a 2a 2f 0a 23 64 65 66 69 6e  HasWin.*/.#defin
19a70 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30  e EP_FromJoin  0
19a80 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69  x000001 /* Origi
19a90 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e  nates in ON/USIN
19aa0 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65  G clause of oute
19ab0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
19ac0 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30  e EP_Distinct  0
19ad0 78 30 30 30 30 30 32 20 2f 2a 20 41 67 67 72 65  x000002 /* Aggre
19ae0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
19af0 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  th DISTINCT keyw
19b00 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ord */.#define E
19b10 50 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30 30  P_HasFunc   0x00
19b20 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0004 /* Contains
19b30 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e   one or more fun
19b40 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69  ctions of any ki
19b50 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nd */.#define EP
19b60 5f 46 69 78 65 64 43 6f 6c 20 20 30 78 30 30 30  _FixedCol  0x000
19b70 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e  008 /* TK_Column
19b80 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 66 69   with a known fi
19b90 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a 23 64 65  xed value */.#de
19ba0 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
19bb0 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 43 6f    0x000010 /* Co
19bc0 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
19bd0 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
19be0 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
19bf0 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
19c00 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
19c10 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
19c20 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
19c30 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
19c40 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
19c50 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
19c60 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
19c70 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
19c80 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
19c90 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
19ca0 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
19cb0 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
19cc0 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
19cd0 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
19ce0 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
19cf0 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
19d00 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  E operator */.#d
19d10 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63  efine EP_Generic
19d20 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49     0x000200 /* I
19d30 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72  gnore COLLATE or
19d40 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69   affinity on thi
19d50 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  s tree */.#defin
19d60 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30  e EP_IntValue  0
19d70 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67  x000400 /* Integ
19d80 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  er value contain
19d90 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a  ed in u.iValue *
19da0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73  /.#define EP_xIs
19db0 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20  Select 0x000800 
19dc0 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20  /* x.pSelect is 
19dd0 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65  valid (otherwise
19de0 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a   x.pList is) */.
19df0 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20  #define EP_Skip 
19e00 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
19e10 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72   COLLATE, AS, or
19e20 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65   UNLIKELY */.#de
19e30 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
19e40 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
19e50 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
19e60 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
19e70 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
19e80 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78   EP_TokenOnly 0x
19e90 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
19ea0 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
19eb0 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
19ec0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
19ed0 50 5f 57 69 6e 20 20 20 20 20 20 20 30 78 30 30  P_Win       0x00
19ee0 38 30 30 30 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  8000 /* Contains
19ef0 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
19f00 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
19f10 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30  MemToken  0x0100
19f20 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
19f30 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
19f40 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
19f50 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
19f60 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
19f70 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
19f80 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
19f90 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
19fa0 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f  kely  0x040000 /
19fb0 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20  * unlikely() or 
19fc0 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e  likelihood() fun
19fd0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
19fe0 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78   EP_ConstFunc 0x
19ff0 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49  080000 /* A SQLI
1a000 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
1a010 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e   or _SLOCHNG fun
1a020 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
1a030 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78   EP_CanBeNull 0x
1a040 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65  100000 /* Can be
1a050 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f   null despite NO
1a060 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
1a070 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
1a080 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30  Subquery  0x2000
1a090 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
1a0a0 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20  ins a TK_SELECT 
1a0b0 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
1a0c0 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20  ine EP_Alias    
1a0d0 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20   0x400000 /* Is 
1a0e0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72  an alias for a r
1a0f0 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
1a100 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c   */.#define EP_L
1a110 65 61 66 20 20 20 20 20 20 30 78 38 30 30 30 30  eaf      0x80000
1a120 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c  0 /* Expr.pLeft,
1a130 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65   .pRight, .u.pSe
1a140 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f  lect all NULL */
1a150 0a 23 64 65 66 69 6e 65 20 45 50 5f 57 69 6e 46  .#define EP_WinF
1a160 75 6e 63 20 20 30 78 31 30 30 30 30 30 30 20 2f  unc  0x1000000 /
1a170 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20 77 69  * TK_FUNCTION wi
1a180 74 68 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 73  th Expr.y.pWin s
1a190 65 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  et */.#define EP
1a1a0 5f 53 75 62 72 74 6e 20 20 20 30 78 32 30 30 30  _Subrtn   0x2000
1a1b0 30 30 30 20 2f 2a 20 55 73 65 73 20 45 78 70 72  000 /* Uses Expr
1a1c0 2e 79 2e 73 75 62 2e 20 54 4b 5f 49 4e 2c 20 5f  .y.sub. TK_IN, _
1a1d0 53 45 4c 45 43 54 2c 20 6f 72 20 5f 45 58 49 53  SELECT, or _EXIS
1a1e0 54 53 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  TS */.#define EP
1a1f0 5f 51 75 6f 74 65 64 20 20 20 30 78 34 30 30 30  _Quoted   0x4000
1a200 30 30 30 20 2f 2a 20 54 4b 5f 49 44 20 77 61 73  000 /* TK_ID was
1a210 20 6f 72 69 67 69 6e 61 6c 6c 79 20 71 75 6f 74   originally quot
1a220 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ed */.#define EP
1a230 5f 53 74 61 74 69 63 20 20 20 30 78 38 30 30 30  _Static   0x8000
1a240 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d  000 /* Held in m
1a250 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e  emory not obtain
1a260 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
1a270 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 45   */../*.** The E
1a280 50 5f 50 72 6f 70 61 67 61 74 65 20 6d 61 73 6b  P_Propagate mask
1a290 20 69 73 20 61 20 73 65 74 20 6f 66 20 70 72 6f   is a set of pro
1a2a0 70 65 72 74 69 65 73 20 74 68 61 74 20 61 75 74  perties that aut
1a2b0 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72 6f 70 61  omatically propa
1a2c0 67 61 74 65 0a 2a 2a 20 75 70 77 61 72 64 73 20  gate.** upwards 
1a2d0 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e 6f 64 65  into parent node
1a2e0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s..*/.#define EP
1a2f0 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43  _Propagate (EP_C
1a300 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65  ollate|EP_Subque
1a310 72 79 7c 45 50 5f 48 61 73 46 75 6e 63 29 0a 0a  ry|EP_HasFunc)..
1a320 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
1a330 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
1a340 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
1a350 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
1a360 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
1a370 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
1a380 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  e ExprHasPropert
1a390 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29  y(E,P)     (((E)
1a3a0 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
1a3b0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
1a3c0 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29  AllProperty(E,P)
1a3d0 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
1a3e0 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
1a3f0 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
1a400 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e  y(E,P)     (E)->
1a410 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
1a420 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70  ne ExprClearProp
1a430 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d  erty(E,P)   (E)-
1a440 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
1a450 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50   The ExprSetVVAP
1a460 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20  roperty() macro 
1a470 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69  is used for Veri
1a480 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
1a490 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63  tion,.** and Acc
1a4a0 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e  reditation only.
1a4b0 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20    It works like 
1a4c0 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
1a4d0 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20  ) during VVA.** 
1a4e0 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73  processes but is
1a4f0 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c   a no-op for del
1a500 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  ivery..*/.#ifdef
1a510 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
1a520 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
1a530 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  AProperty(E,P)  
1a540 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
1a550 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
1a560 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
1a570 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  y(E,P).#endif../
1a580 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
1a590 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
1a5a0 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
1a5b0 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
1a5c0 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74  l Expr.** struct
1a5d0 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  , an Expr struct
1a5e0 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64   with the EP_Red
1a5f0 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e  uced flag set in
1a600 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61   Expr.flags.** a
1a610 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
1a620 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
1a630 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
1a640 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
1a650 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
1a660 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
1a670 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
1a680 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
1a690 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
1a6a0 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
1a6b0 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
1a6c0 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
1a6d0 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
1a6e0 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
1a6f0 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
1a700 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
1a710 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
1a720 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
1a730 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
1a740 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
1a750 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
1a760 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
1a770 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74  t.** above sqlit
1a780 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20  e3ExprDup() for 
1a790 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66  details..*/.#def
1a7a0 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55  ine EXPRDUP_REDU
1a7b0 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30  CE         0x000
1a7c0 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63  1  /* Used reduc
1a7d0 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64  ed-size Expr nod
1a7e0 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c  es */../*.** A l
1a7f0 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
1a800 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73  ns.  Each expres
1a810 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61  sion may optiona
1a820 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61  lly have a.** na
1a830 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d  me.  An expr/nam
1a840 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61  e combination ca
1a850 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76  n be used in sev
1a860 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a  eral ways, such.
1a870 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f  ** as the list o
1a880 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66  f "expr AS ID" f
1a890 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ields following 
1a8a0 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e  a "SELECT" or in
1a8b0 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20   the.** list of 
1a8c0 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d  "ID = expr" item
1a8d0 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20  s in an UPDATE. 
1a8e0 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
1a8f0 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c  ssions can.** al
1a900 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68  so be used as th
1a910 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20  e argument to a 
1a920 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69  function, in whi
1a930 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e  ch case the a.zN
1a940 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20  ame.** field is 
1a950 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
1a960 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45  By default the E
1a970 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20  xpr.zSpan field 
1a980 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65  holds a human-re
1a990 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69  adable descripti
1a9a0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70  on of.** the exp
1a9b0 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
1a9c0 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
1a9d0 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20  ration of error 
1a9e0 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20  messages and.** 
1a9f0 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20  column labels.  
1aa00 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78  In this case, Ex
1aa10 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69  pr.zSpan is typi
1aa20 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f  cally the text o
1aa30 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78  f a.** column ex
1aa40 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65  pression as it e
1aa50 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43  xists in a SELEC
1aa60 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f  T statement.  Ho
1aa70 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65  wever, if.** the
1aa80 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67   bSpanIsTab flag
1aa90 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53   is set, then zS
1aaa0 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65  pan is overloade
1aab0 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61  d to mean the na
1aac0 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73  me.** of the res
1aad0 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ult column in th
1aae0 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45  e form: DATABASE
1aaf0 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20  .TABLE.COLUMN.  
1ab00 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f  This later.** fo
1ab10 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e  rm is used for n
1ab20 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77  ame resolution w
1ab30 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20  ith nested FROM 
1ab40 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75  clauses..*/.stru
1ab50 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20  ct ExprList {.  
1ab60 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20  int nExpr;      
1ab70 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1ab80 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
1ab90 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  on the list */. 
1aba0 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
1abb0 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65  _item { /* For e
1abc0 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
1abd0 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20  n the list */.  
1abe0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
1abf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1ac00 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20   parse tree for 
1ac10 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
1ac20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
1ac30 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
1ac40 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74  * Token associat
1ac50 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70  ed with this exp
1ac60 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63  ression */.    c
1ac70 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20  har *zSpan;     
1ac80 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e         /* Origin
1ac90 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65  al text of the e
1aca0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
1acb0 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20   u8 sortOrder;  
1acc0 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f           /* 1 fo
1acd0 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20  r DESC or 0 for 
1ace0 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ASC */.    unsig
1acf0 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20  ned done :1;    
1ad00 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20     /* A flag to 
1ad10 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72  indicate when pr
1ad20 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69  ocessing is fini
1ad30 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  shed */.    unsi
1ad40 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20  gned bSpanIsTab 
1ad50 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c  :1; /* zSpan hol
1ad60 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55  ds DB.TABLE.COLU
1ad70 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  MN */.    unsign
1ad80 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20  ed reusable :1; 
1ad90 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78    /* Constant ex
1ada0 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73  pression is reus
1adb0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  able */.    unsi
1adc0 67 6e 65 64 20 62 53 6f 72 74 65 72 52 65 66 20  gned bSorterRef 
1add0 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20 65 76 61  :1; /* Defer eva
1ade0 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c 20 61 66  luation until af
1adf0 74 65 72 20 73 6f 72 74 69 6e 67 20 2a 2f 0a 20  ter sorting */. 
1ae00 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
1ae10 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
1ae20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
1ae30 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f  l;      /* For O
1ae40 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20  RDER BY, column 
1ae50 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74  number in result
1ae60 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20   set */.        
1ae70 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20  u16 iAlias;     
1ae80 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1ae90 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
1aea0 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
1aeb0 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20        } x;.     
1aec0 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52   int iConstExprR
1aed0 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69  eg;      /* Regi
1aee0 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78  ster in which Ex
1aef0 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68  pr value is cach
1af00 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20  ed */.    } u;. 
1af10 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
1af20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1af30 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68 20 65   slot for each e
1af40 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
1af50 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
1af60 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1af70 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1af80 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
1af90 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
1afa0 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
1afb0 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
1afc0 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
1afd0 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
1afe0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
1aff0 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
1b000 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
1b010 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
1b020 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
1b030 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
1b040 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
1b050 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
1b060 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
1b070 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
1b080 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
1b090 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
1b0a0 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
1b0b0 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
1b0c0 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
1b0d0 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
1b0e0 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
1b0f0 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
1b100 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
1b110 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
1b120 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
1b130 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
1b140 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
1b150 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
1b160 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
1b170 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
1b180 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
1b190 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
1b1a0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1b1b0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
1b1c0 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
1b1d0 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
1b1e0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
1b1f0 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
1b200 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
1b210 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
1b220 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
1b230 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b240 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
1b250 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
1b260 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
1b270 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1b280 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
1b290 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
1b2a0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1b2b0 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
1b2c0 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
1b2d0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1b2e0 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
1b2f0 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
1b300 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
1b310 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
1b320 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
1b330 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
1b340 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
1b350 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1b360 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
1b370 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
1b380 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
1b390 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
1b3a0 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
1b3b0 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
1b3c0 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
1b3d0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
1b3e0 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
1b3f0 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
1b400 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
1b410 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
1b420 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
1b430 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
1b440 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
1b450 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
1b460 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
1b470 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
1b480 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
1b490 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
1b4a0 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
1b4b0 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
1b4c0 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
1b4d0 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
1b4e0 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
1b4f0 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
1b500 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
1b510 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
1b520 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
1b530 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
1b540 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
1b550 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
1b560 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
1b570 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
1b580 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
1b590 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
1b5a0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
1b5b0 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
1b5c0 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
1b5d0 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
1b5e0 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
1b5f0 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
1b600 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
1b610 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
1b620 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
1b630 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
1b640 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
1b650 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
1b660 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20  .  int nSrc;    
1b670 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b680 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
1b690 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
1b6a0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33  M clause */.  u3
1b6b0 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  2 nAlloc;      /
1b6c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
1b6d0 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
1b6e0 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
1b6f0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
1b700 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
1b710 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
1b720 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
1b730 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
1b740 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
1b750 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
1b760 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
1b770 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
1b780 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
1b790 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
1b7a0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1b7b0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
1b7c0 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
1b7d0 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
1b7e0 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
1b7f0 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
1b800 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
1b810 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
1b820 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
1b830 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
1b840 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
1b850 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
1b860 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1b870 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
1b880 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
1b890 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
1b8a0 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
1b8b0 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
1b8c0 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
1b8d0 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
1b8e0 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
1b8f0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1b900 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
1b910 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
1b920 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  b */.    int reg
1b930 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65  Result;    /* Re
1b940 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
1b950 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d  results of a co-
1b960 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73  routine */.    s
1b970 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38  truct {.      u8
1b980 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
1b990 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
1b9a0 62 65 74 77 65 65 6e 20 74 68 69 73 20 74 61 62  between this tab
1b9b0 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
1b9c0 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ous */.      uns
1b9d0 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64  igned notIndexed
1b9e0 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20   :1;    /* True 
1b9f0 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f  if there is a NO
1ba00 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
1ba10 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1ba20 65 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a  ed isIndexedBy :
1ba30 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  1;   /* True if 
1ba40 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45  there is an INDE
1ba50 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  XED BY clause */
1ba60 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1ba70 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20  isTabFunc :1;   
1ba80 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62    /* True if tab
1ba90 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
1baa0 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20  on syntax */.   
1bab0 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f     unsigned isCo
1bac0 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a  rrelated :1;  /*
1bad0 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65   True if sub-que
1bae0 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ry is correlated
1baf0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1bb00 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20  ed viaCoroutine 
1bb10 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e  :1;  /* Implemen
1bb20 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74  ted as a co-rout
1bb30 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ine */.      uns
1bb40 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76  igned isRecursiv
1bb50 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  e :1;   /* True 
1bb60 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65  for recursive re
1bb70 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20  ference in WITH 
1bb80 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20 20  */.    } fg;.   
1bb90 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
1bba0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
1bbb0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
1bbc0 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
1bbd0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
1bbe0 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
1bbf0 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
1bc00 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
1bc10 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
1bc20 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
1bc30 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1bc40 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
1bc50 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
1bc60 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
1bc70 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54  f column N of pT
1bc80 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
1bc90 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
1bca0 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79  char *zIndexedBy
1bcb0 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  ;    /* Identifi
1bcc0 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
1bcd0 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
1bce0 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78  ause */.      Ex
1bcf0 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67  prList *pFuncArg
1bd00 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20  ;  /* Arguments 
1bd10 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  to table-valued-
1bd20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
1bd30 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20  } u1;.    Index 
1bd40 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49  *pIBIndex;  /* I
1bd50 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
1bd60 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1bd70 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f  u1.zIndexedBy */
1bd80 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
1bd90 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
1bda0 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
1bdb0 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
1bdc0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1bdd0 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
1bde0 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
1bdf0 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
1be00 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
1be10 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
1be20 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
1be30 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
1be40 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
1be50 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
1be60 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
1be70 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
1be80 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
1be90 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
1bea0 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
1beb0 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
1bec0 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
1bed0 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
1bee0 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
1bef0 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
1bf00 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1bf10 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
1bf20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
1bf30 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
1bf40 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
1bf50 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
1bf60 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
1bf70 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
1bf80 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
1bf90 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
1bfa0 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
1bfb0 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
1bfc0 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  e */.../*.** Fla
1bfd0 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
1bfe0 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
1bff0 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
1c000 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
1c010 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
1c020 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
1c030 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a  gs member..**.**
1c040 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1c050 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
1c060 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
1c070 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d     WHERE_USE_LIM
1c080 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c  IT  == SF_FixedL
1c090 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  imit.*/.#define 
1c0a0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
1c0b0 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
1c0c0 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
1c0d0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1c0e0 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
1c0f0 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
1c100 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
1c110 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1c120 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
1c130 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
1c140 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
1c150 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
1c160 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1c170 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
1c180 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
1c190 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
1c1a0 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
1c1b0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
1c1c0 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ERE_ONEPASS_MULT
1c1d0 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f  IROW 0x0008 /* O
1c1e0 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74  NEPASS is ok wit
1c1f0 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1c200 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c210 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20  _DUPLICATES_OK  
1c220 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74    0x0010 /* Ok t
1c230 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d  o return a row m
1c240 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f  ore than once */
1c250 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1c260 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20 20 20  R_SUBCLAUSE     
1c270 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73  0x0020 /* Proces
1c280 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45  sing a sub-WHERE
1c290 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20   as part of.    
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2c0 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69    ** the OR opti
1c2d0 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65  mization  */.#de
1c2e0 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50  fine WHERE_GROUP
1c2f0 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30 30  BY          0x00
1c300 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69  40 /* pOrderBy i
1c310 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50  s really a GROUP
1c320 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57   BY */.#define W
1c330 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20  HERE_DISTINCTBY 
1c340 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20        0x0080 /* 
1c350 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c  pOrderby is real
1c360 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c  ly a DISTINCT cl
1c370 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1c380 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49  WHERE_WANT_DISTI
1c390 4e 43 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a  NCT    0x0100 /*
1c3a0 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64   All output need
1c3b0 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74  s to be distinct
1c3c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c3d0 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20  E_SORTBYGROUP   
1c3e0 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70     0x0200 /* Sup
1c3f0 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72  port sqlite3Wher
1c400 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23  eIsSorted() */.#
1c410 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1c420 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30 78  K_TABLE       0x
1c430 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  0400 /* Do not d
1c440 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61  efer seeks on ma
1c450 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  in table */.#def
1c460 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1c470 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30  Y_LIMIT    0x080
1c480 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d  0 /* ORDERBY+LIM
1c490 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20  IT on the inner 
1c4a0 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  loop */.#define 
1c4b0 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f  WHERE_SEEK_UNIQ_
1c4c0 54 41 42 4c 45 20 20 30 78 31 30 30 30 20 2f 2a  TABLE  0x1000 /*
1c4d0 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65   Do not defer se
1c4e0 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20 2a 2f  eks if unique */
1c4f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c500 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1c510 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x2000    not cu
1c520 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1c530 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53  #define WHERE_US
1c540 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30  E_LIMIT        0
1c550 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65  x4000 /* Use the
1c560 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65   LIMIT in cost e
1c570 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20  stimates */.    
1c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c590 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30      /*     0x800
1c5a0 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1c5b0 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41  ly used */../* A
1c5c0 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
1c5d0 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
1c5e0 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
1c5f0 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
1c600 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
1c610 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
1c620 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
1c630 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
1c640 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1c650 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
1c660 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
1c670 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c680 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
1c690 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
1c6a0 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
1c6b0 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
1c6c0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1c6d0 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
1c6e0 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
1c6f0 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
1c700 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
1c710 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
1c720 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
1c730 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
1c740 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
1c750 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
1c760 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
1c770 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
1c780 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
1c790 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
1c7a0 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1c7b0 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
1c7c0 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1c7d0 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
1c7e0 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
1c7f0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1c800 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1c810 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
1c820 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
1c830 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
1c840 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
1c850 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
1c860 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
1c870 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
1c880 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
1c890 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
1c8a0 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
1c8b0 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
1c8c0 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
1c8d0 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
1c8e0 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
1c8f0 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
1c900 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  most.** context 
1c910 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73  is searched firs
1c920 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20  t.  If no match 
1c930 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65  is found, the ne
1c940 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74  xt outer.** cont
1c950 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20  ext is checked. 
1c960 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69   If there is sti
1c970 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65  ll no match, the
1c980 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a   next context.**
1c990 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68   is checked.  Th
1c9a0 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69  is process conti
1c9b0 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65  nues until eithe
1c9c0 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  r a match is fou
1c9d0 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e  nd.** or all con
1c9e0 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e  texts are check.
1c9f0 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69    When a match i
1ca00 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65  s found, the nRe
1ca10 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  f member of.** t
1ca20 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  he context conta
1ca30 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20  ining the match 
1ca40 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
1ca50 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
1ca60 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
1ca70 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
1ca80 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
1ca90 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
1caa0 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
1cab0 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
1cac0 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
1cad0 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
1cae0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1caf0 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
1cb00 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
1cb10 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
1cb20 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
1cb30 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
1cb40 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
1cb50 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
1cb60 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
1cb70 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
1cb80 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
1cb90 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
1cba0 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
1cbb0 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
1cbc0 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
1cbd0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
1cbe0 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
1cbf0 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  ;    /* Optional
1cc00 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d   list of result-
1cc10 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
1cc20 20 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67     AggInfo *pAgg
1cc30 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72  Info;   /* Infor
1cc40 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67  mation about agg
1cc50 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20  regates at this 
1cc60 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73  level */.    Ups
1cc70 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20 20 20  ert *pUpsert;   
1cc80 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54    /* ON CONFLICT
1cc90 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74   clause informat
1cca0 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73 65  ion from an upse
1ccb0 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20  rt */.  } uNC;. 
1ccc0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
1ccd0 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
1cce0 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
1ccf0 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
1cd00 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  rmost */.  int n
1cd10 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
1cd20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d  /* Number of nam
1cd30 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74  es resolved by t
1cd40 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  his context */. 
1cd50 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
1cd60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1cd70 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e  of errors encoun
1cd80 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f  tered while reso
1cd90 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20  lving names */. 
1cda0 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20   u16 ncFlags;   
1cdb0 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72        /* Zero or
1cdc0 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73   more NC_* flags
1cdd0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a   defined below *
1cde0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 57 69 6e  /.  Select *pWin
1cdf0 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c 45  Select;  /* SELE
1ce00 43 54 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72  CT statement for
1ce10 20 61 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e 63   any window func
1ce20 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  tions */.};../*.
1ce30 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
1ce40 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
1ce50 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
1ce60 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  ield..**.** Valu
1ce70 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1ce80 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1ce90 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1cea0 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20  NC_HasAgg    == 
1ceb0 53 46 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20  SF_HasAgg    == 
1cec0 45 50 5f 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f  EP_Agg.**    NC_
1ced0 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f  MinMaxAgg == SF_
1cee0 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c  MinMaxAgg == SQL
1cef0 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1cf00 2a 2a 20 20 20 20 4e 43 5f 48 61 73 57 69 6e 20  **    NC_HasWin 
1cf10 20 20 20 3d 3d 20 45 50 5f 57 69 6e 0a 2a 2a 0a     == EP_Win.**.
1cf20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
1cf30 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20  lowAgg  0x0001  
1cf40 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
1cf50 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
1cf60 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
1cf70 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
1cf80 30 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20  0x0002  /* True 
1cf90 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
1cfa0 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
1cfb0 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
1cfc0 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30  _IsCheck   0x000
1cfd0 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  4  /* True if re
1cfe0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
1cff0 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
1d000 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  int */.#define N
1d010 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30  C_InAggFunc 0x00
1d020 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61  08  /* True if a
1d030 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e  nalyzing argumen
1d040 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e  ts to an agg fun
1d050 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  c */.#define NC_
1d060 48 61 73 41 67 67 20 20 20 20 30 78 30 30 31 30  HasAgg    0x0010
1d070 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
1d080 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1d090 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
1d0a0 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20  fine NC_IdxExpr 
1d0b0 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75    0x0020  /* Tru
1d0c0 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63  e if resolving c
1d0d0 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45  olumns of CREATE
1d0e0 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
1d0f0 65 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30  e NC_VarSelect 0
1d100 78 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72  x0040  /* A corr
1d110 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
1d120 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
1d130 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 45 4c 69  .#define NC_UELi
1d140 73 74 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a  st    0x0080  /*
1d150 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 45 4c   True if uNC.pEL
1d160 69 73 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23  ist is used */.#
1d170 64 65 66 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e  define NC_UAggIn
1d180 66 6f 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54  fo  0x0100  /* T
1d190 72 75 65 20 69 66 20 75 4e 43 2e 70 41 67 67 49  rue if uNC.pAggI
1d1a0 6e 66 6f 20 69 73 20 75 73 65 64 20 2a 2f 0a 23  nfo is used */.#
1d1b0 64 65 66 69 6e 65 20 4e 43 5f 55 55 70 73 65 72  define NC_UUpser
1d1c0 74 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 54  t   0x0200  /* T
1d1d0 72 75 65 20 69 66 20 75 4e 43 2e 70 55 70 73 65  rue if uNC.pUpse
1d1e0 72 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64  rt is used */.#d
1d1f0 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41  efine NC_MinMaxA
1d200 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69  gg 0x1000  /* mi
1d210 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73  n/max aggregates
1d220 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65   seen.  See note
1d230 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
1d240 65 20 4e 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30  e NC_Complex   0
1d250 78 32 30 30 30 20 20 2f 2a 20 54 72 75 65 20 69  x2000  /* True i
1d260 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20  f a function or 
1d270 73 75 62 71 75 65 72 79 20 73 65 65 6e 20 2a 2f  subquery seen */
1d280 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
1d290 77 57 69 6e 20 20 30 78 34 30 30 30 20 20 2f 2a  wWin  0x4000  /*
1d2a0 20 57 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   Window function
1d2b0 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65  s are allowed he
1d2c0 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  re */.#define NC
1d2d0 5f 48 61 73 57 69 6e 20 20 20 20 30 78 38 30 30  _HasWin    0x800
1d2e0 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72  0  /* One or mor
1d2f0 65 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  e window functio
1d300 6e 73 20 73 65 65 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  ns seen */../*.*
1d310 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1d320 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f   the following o
1d330 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
1d340 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46  a single ON CONF
1d350 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65 20 69  LICT.** clause i
1d360 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a 2a 0a  n an upsert..**.
1d370 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 54 61  ** The pUpsertTa
1d380 72 67 65 74 20 66 69 65 6c 64 20 69 73 20 6f 6e  rget field is on
1d390 6c 79 20 73 65 74 20 69 66 20 74 68 65 20 4f 4e  ly set if the ON
1d3a0 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1d3b0 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e   includes.** con
1d3c0 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61  flict-target cla
1d3d0 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20 43 4f  use.  (In "ON CO
1d3e0 4e 46 4c 49 43 54 28 61 2c 62 29 22 20 74 68 65  NFLICT(a,b)" the
1d3f0 20 22 28 61 2c 62 29 22 20 69 73 20 74 68 65 0a   "(a,b)" is the.
1d400 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67  ** conflict-targ
1d410 65 74 20 63 6c 61 75 73 65 2e 29 20 20 54 68 65  et clause.)  The
1d420 20 70 55 70 73 65 72 74 54 61 72 67 65 74 57 68   pUpsertTargetWh
1d430 65 72 65 20 69 73 20 74 68 65 20 6f 70 74 69 6f  ere is the optio
1d440 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61  nal.** WHERE cla
1d450 75 73 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e  use used to iden
1d460 74 69 66 79 20 70 61 72 74 69 61 6c 20 75 6e 69  tify partial uni
1d470 71 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a  que indexes..**.
1d480 2a 2a 20 70 55 70 73 65 72 74 53 65 74 20 69 73  ** pUpsertSet is
1d490 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c   the list of col
1d4a0 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73 20 6f  umn=expr terms o
1d4b0 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
1d4c0 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68 65 20  tement. .** The 
1d4d0 70 55 70 73 65 72 74 53 65 74 20 66 69 65 6c 64  pUpsertSet field
1d4e0 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61 20 4f   is NULL for a O
1d4f0 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20 4e 4f  N CONFLICT DO NO
1d500 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a 20 70  THING.  The.** p
1d510 55 70 73 65 72 74 57 68 65 72 65 20 69 73 20 74  UpsertWhere is t
1d520 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1d530 66 6f 72 20 74 68 65 20 55 50 44 41 54 45 20 61  for the UPDATE a
1d540 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66 20 74 68  nd is NULL if th
1d550 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73  e.** WHERE claus
1d560 65 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f  e is omitted..*/
1d570 0a 73 74 72 75 63 74 20 55 70 73 65 72 74 20 7b  .struct Upsert {
1d580 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70  .  ExprList *pUp
1d590 73 65 72 74 54 61 72 67 65 74 3b 20 20 2f 2a 20  sertTarget;  /* 
1d5a0 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63 72 69 70  Optional descrip
1d5b0 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69 63 74  tion of conflict
1d5c0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  ing index */.  E
1d5d0 78 70 72 20 2a 70 55 70 73 65 72 74 54 61 72 67  xpr *pUpsertTarg
1d5e0 65 74 57 68 65 72 65 3b 20 2f 2a 20 57 48 45 52  etWhere; /* WHER
1d5f0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
1d600 74 69 61 6c 20 69 6e 64 65 78 20 74 61 72 67 65  tial index targe
1d610 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ts */.  ExprList
1d620 20 2a 70 55 70 73 65 72 74 53 65 74 3b 20 20 20   *pUpsertSet;   
1d630 20 20 2f 2a 20 54 68 65 20 53 45 54 20 63 6c 61    /* The SET cla
1d640 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f 4e 20 43  use from an ON C
1d650 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a  ONFLICT UPDATE *
1d660 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65 72  /.  Expr *pUpser
1d670 74 57 68 65 72 65 3b 20 20 20 20 20 20 20 2f 2a  tWhere;       /*
1d680 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
1d690 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  r the ON CONFLIC
1d6a0 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 2f 2a  T UPDATE */.  /*
1d6b0 20 54 68 65 20 66 69 65 6c 64 73 20 61 62 6f 76   The fields abov
1d6c0 65 20 63 6f 6d 70 72 69 73 65 20 74 68 65 20 70  e comprise the p
1d6d0 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68  arse tree for th
1d6e0 65 20 75 70 73 65 72 74 20 63 6c 61 75 73 65 2e  e upsert clause.
1d6f0 0a 20 20 2a 2a 20 54 68 65 20 66 69 65 6c 64 73  .  ** The fields
1d700 20 62 65 6c 6f 77 20 61 72 65 20 75 73 65 64 20   below are used 
1d710 74 6f 20 74 72 61 6e 73 66 65 72 20 69 6e 66 6f  to transfer info
1d720 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  rmation from the
1d730 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20 70 72 6f   INSERT.  ** pro
1d740 63 65 73 73 69 6e 67 20 64 6f 77 6e 20 69 6e 74  cessing down int
1d750 6f 20 74 68 65 20 55 50 44 41 54 45 20 70 72 6f  o the UPDATE pro
1d760 63 65 73 73 69 6e 67 20 77 68 69 6c 65 20 67 65  cessing while ge
1d770 6e 65 72 61 74 69 6e 67 20 63 6f 64 65 2e 0a 20  nerating code.. 
1d780 20 2a 2a 20 55 70 73 65 72 74 20 6f 77 6e 73 20   ** Upsert owns 
1d790 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  the memory alloc
1d7a0 61 74 65 64 20 61 62 6f 76 65 2c 20 62 75 74 20  ated above, but 
1d7b0 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72 79 20 62  not the memory b
1d7c0 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64 65 78  elow. */.  Index
1d7d0 20 2a 70 55 70 73 65 72 74 49 64 78 3b 20 20 20   *pUpsertIdx;   
1d7e0 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74 72 61 69       /* Constrai
1d7f0 6e 74 20 74 68 61 74 20 70 55 70 73 65 72 74 54  nt that pUpsertT
1d800 61 72 67 65 74 20 69 64 65 6e 74 69 66 69 65 73  arget identifies
1d810 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1d820 55 70 73 65 72 74 53 72 63 3b 20 20 20 20 20 20  UpsertSrc;      
1d830 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62 65 20 75  /* Table to be u
1d840 70 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  pdated */.  int 
1d850 72 65 67 44 61 74 61 3b 20 20 20 20 20 20 20 20  regData;        
1d860 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
1d870 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1d880 61 72 72 61 79 20 6f 66 20 56 41 4c 55 45 53 20  array of VALUES 
1d890 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74 61 43 75  */.  int iDataCu
1d8a0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1d8b0 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 64  * Index of the d
1d8c0 61 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ata cursor */.  
1d8d0 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20 20  int iIdxCur;    
1d8e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1d8f0 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ex of the first 
1d900 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a  index cursor */.
1d910 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
1d920 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1d930 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1d940 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e   contains all in
1d950 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65  formation.** nee
1d960 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ded to generate 
1d970 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c  code for a singl
1d980 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1d990 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68  nt..**.** See th
1d9a0 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74  e header comment
1d9b0 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75 74 65 4c   on the computeL
1d9c0 69 6d 69 74 52 65 67 69 73 74 65 72 73 28 29 20  imitRegisters() 
1d9d0 72 6f 75 74 69 6e 65 20 66 6f 72 20 61 0a 2a 2a  routine for a.**
1d9e0 20 64 65 74 61 69 6c 65 64 20 64 65 73 63 72 69   detailed descri
1d9f0 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 65 61  ption of the mea
1da00 6e 69 6e 67 20 6f 66 20 74 68 65 20 69 4c 69 6d  ning of the iLim
1da10 69 74 20 61 6e 64 20 69 4f 66 66 73 65 74 20 66  it and iOffset f
1da20 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64  ields..**.** add
1da30 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72  rOpenEphm[] entr
1da40 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ies contain the 
1da50 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70  address of OP_Op
1da60 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
1da70 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64  des..** These ad
1da80 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20  dresses must be 
1da90 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77  stored so that w
1daa0 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e  e can go back an
1dab0 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65  d fill in.** the
1dac0 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20   P4_KEYINFO and 
1dad0 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61  P2 parameters la
1dae0 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68  ter.  Neither th
1daf0 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a  e KeyInfo nor.**
1db00 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1db10 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e  olumns in P2 can
1db20 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20   be computed at 
1db30 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a  the same time.**
1db40 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45   as the OP_OpenE
1db50 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  phm instruction 
1db60 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65  is coded because
1db70 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69   not.** enough i
1db80 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1db90 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75   the compound qu
1dba0 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20  ery is known at 
1dbb0 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54  that point..** T
1dbc0 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1dbd0 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61  ddrOpenTran[0] a
1dbe0 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20  nd [1] contains 
1dbf0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
1dc00 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  ces.** for the r
1dc10 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20  esult set.  The 
1dc20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
1dc30 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74  OpenEphm[2] cont
1dc40 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a  ains collating.*
1dc50 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20  * sequences for 
1dc60 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1dc70 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  use..*/.struct S
1dc80 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69  elect {.  ExprLi
1dc90 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20  st *pEList;     
1dca0 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f   /* The fields o
1dcb0 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a  f the result */.
1dcc0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1dcd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1dce0 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f  of: TK_UNION TK_
1dcf0 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54  ALL TK_INTERSECT
1dd00 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20   TK_EXCEPT */.  
1dd10 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f  LogEst nSelectRo
1dd20 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
1dd30 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ted number of re
1dd40 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75  sult rows */.  u
1dd50 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20  32 selFlags;    
1dd60 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
1dd70 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   SF_* values */.
1dd80 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f    int iLimit, iO
1dd90 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f  ffset;   /* Memo
1dda0 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c  ry registers hol
1ddb0 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46  ding LIMIT & OFF
1ddc0 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  SET counters */.
1ddd0 20 20 75 33 32 20 73 65 6c 49 64 3b 20 20 20 20    u32 selId;    
1dde0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 6e 69 71           /* Uniq
1ddf0 75 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 75  ue identifier nu
1de00 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 53 45  mber for this SE
1de10 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74 20 61 64  LECT */.  int ad
1de20 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
1de30 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
1de40 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
1de50 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
1de60 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
1de70 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rc;         /* T
1de80 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
1de90 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
1dea0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
1deb0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
1dec0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
1ded0 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68  roupBy;    /* Th
1dee0 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
1def0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61  e */.  Expr *pHa
1df00 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  ving;         /*
1df10 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
1df20 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
1df30 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f   *pOrderBy;    /
1df40 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1df50 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63  lause */.  Selec
1df60 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20  t *pPrior;      
1df70 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63    /* Prior selec
1df80 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
1df90 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
1dfa0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e   */.  Select *pN
1dfb0 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1dfc0 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74  Next select to t
1dfd0 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d  he left in a com
1dfe0 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20  pound */.  Expr 
1dff0 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20  *pLimit;        
1e000 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65    /* LIMIT expre
1e010 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
1e020 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
1e030 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1e040 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20          /* WITH 
1e050 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
1e060 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20  to this select. 
1e070 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23 69 66 6e  Or NULL. */.#ifn
1e080 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1e090 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 57 69 6e  WINDOWFUNC.  Win
1e0a0 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20  dow *pWin;      
1e0b0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 77      /* List of w
1e0c0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
1e0d0 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69  */.  Window *pWi
1e0e0 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f 2a 20 4c  nDefn;      /* L
1e0f0 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 77 69 6e  ist of named win
1e100 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 73 20  dow definitions 
1e110 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
1e120 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
1e130 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65  es for Select.se
1e140 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46  lFlags.  The "SF
1e150 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20  " prefix stands 
1e160 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46  for.** "Select F
1e170 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  lag"..**.** Valu
1e180 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1e190 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1e1a0 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20 20 20  ssert()).**     
1e1b0 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 3d 3d  SF_HasAgg     ==
1e1c0 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20   NC_HasAgg.**   
1e1d0 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20    SF_MinMaxAgg  
1e1e0 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  == NC_MinMaxAgg 
1e1f0 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55      == SQLITE_FU
1e200 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20  NC_MINMAX.**    
1e210 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 3d   SF_FixedLimit =
1e220 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49  = WHERE_USE_LIMI
1e230 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T.*/.#define SF_
1e240 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 30  Distinct       0
1e250 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75  x00001  /* Outpu
1e260 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54  t should be DIST
1e270 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  INCT */.#define 
1e280 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20  SF_All          
1e290 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49 6e    0x00002  /* In
1e2a0 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b  cludes the ALL k
1e2b0 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
1e2c0 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20  e SF_Resolved   
1e2d0 20 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a 20      0x00004  /* 
1e2e0 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65  Identifiers have
1e2f0 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a   been resolved *
1e300 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67  /.#define SF_Agg
1e310 72 65 67 61 74 65 20 20 20 20 20 20 30 78 30 30  regate      0x00
1e320 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  008  /* Contains
1e330 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f   agg functions o
1e340 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  r a GROUP BY */.
1e350 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 41 67  #define SF_HasAg
1e360 67 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31  g         0x0001
1e370 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  0  /* Contains a
1e380 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1e390 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
1e3a0 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
1e3b0 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73 65 73  0x00020  /* Uses
1e3c0 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
1e3d0 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
1e3e0 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
1e3f0 20 20 20 20 20 20 20 30 78 30 30 30 34 30 20 20         0x00040  
1e400 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
1e410 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
1e420 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
1e430 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
1e440 6f 20 20 20 20 30 78 30 30 30 38 30 20 20 2f 2a  o    0x00080  /*
1e450 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
1e460 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
1e470 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
1e480 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20  SF_Compound     
1e490 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20 50 61    0x00100  /* Pa
1e4a0 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64  rt of a compound
1e4b0 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e   query */.#defin
1e4c0 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
1e4d0 20 20 20 20 30 78 30 30 32 30 30 20 20 2f 2a 20      0x00200  /* 
1e4e0 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
1e4f0 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
1e500 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c  /.#define SF_Mul
1e510 74 69 56 61 6c 75 65 20 20 20 20 20 30 78 30 30  tiValue     0x00
1e520 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56  400  /* Single V
1e530 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68 20  ALUES term with 
1e540 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1e550 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74  .#define SF_Nest
1e560 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30 38  edFrom     0x008
1e570 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
1e580 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46   parenthesized F
1e590 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  ROM clause */.#d
1e5a0 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41  efine SF_MinMaxA
1e5b0 67 67 20 20 20 20 20 20 30 78 30 31 30 30 30 20  gg      0x01000 
1e5c0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f   /* Aggregate co
1e5d0 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f  ntaining min() o
1e5e0 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69  r max() */.#defi
1e5f0 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20  ne SF_Recursive 
1e600 20 20 20 20 20 30 78 30 32 30 30 30 20 20 2f 2a       0x02000  /*
1e610 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70   The recursive p
1e620 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69  art of a recursi
1e630 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e  ve CTE */.#defin
1e640 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20  e SF_FixedLimit 
1e650 20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a 20      0x04000  /* 
1e660 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20 62  nSelectRow set b
1e670 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d  y a constant LIM
1e680 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  IT */.#define SF
1e690 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20  _MaybeConvert   
1e6a0 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65 65 64  0x08000  /* Need
1e6b0 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1e6c0 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1e6d0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1e6e0 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20  _Converted      
1e6f0 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79 20 63  0x10000  /* By c
1e700 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1e710 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1e720 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49   */.#define SF_I
1e730 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30 78  ncludeHidden  0x
1e740 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64  20000  /* Includ
1e750 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
1e760 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64   in output */.#d
1e770 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c 65 78  efine SF_Complex
1e780 52 65 73 75 6c 74 20 20 30 78 34 30 30 30 30 20  Result  0x40000 
1e790 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e 74 61   /* Result conta
1e7a0 69 6e 73 20 73 75 62 71 75 65 72 79 20 6f 72 20  ins subquery or 
1e7b0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  function */../*.
1e7c0 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f  ** The results o
1e7d0 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62  f a SELECT can b
1e7e0 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e  e distributed in
1e7f0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61   several ways, a
1e800 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20  s defined.** by 
1e810 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
1e820 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68  wing macros.  Th
1e830 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d  e "SRT" prefix m
1e840 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73  eans "SELECT Res
1e850 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a  ult.** Type"..**
1e860 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f  .**     SRT_Unio
1e870 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  n       Store re
1e880 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69  sults as a key i
1e890 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  n a temporary in
1e8a0 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  dex.**          
1e8b0 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74             ident
1e8c0 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e  ified by pDest->
1e8d0 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
1e8e0 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20     SRT_Except   
1e8f0 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74     Remove result
1e900 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f  s from the tempo
1e910 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74  rary index pDest
1e920 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
1e930 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20       SRT_Exists 
1e940 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69       Store a 1 i
1e950 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44  n memory cell pD
1e960 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20  est->iSDParm if 
1e970 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20  the result.**   
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e990 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70    set is not emp
1e9a0 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ty..**.**     SR
1e9b0 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68  T_Discard     Th
1e9c0 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20  row the results 
1e9d0 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75  away.  This is u
1e9e0 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a  sed by SELECT.**
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea00 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20       statements 
1ea10 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
1ea20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f  whose only purpo
1ea30 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20  se is.**        
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1ea50 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66   side-effects of
1ea60 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
1ea70 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  * All of the abo
1ea80 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69  ve are free to i
1ea90 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45  gnore their ORDE
1eaa0 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f  R BY clause. Tho
1eab0 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f  se that.** follo
1eac0 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65  w must honor the
1ead0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1eae0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1eaf0 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65  Output      Gene
1eb00 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75  rate a row of ou
1eb10 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20  tput (using the 
1eb20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20  OP_ResultRow.** 
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb40 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20      opcode) for 
1eb50 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
1eb60 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a  result set..**.*
1eb70 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20  *     SRT_Mem   
1eb80 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64        Only valid
1eb90 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
1eba0 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  s a single colum
1ebb0 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  n..**           
1ebc0 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20            Store 
1ebd0 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  the first column
1ebe0 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65   of the first re
1ebf0 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20  sult row.**     
1ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec10 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
1ec20 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20  t->iSDParm then 
1ec30 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74  abandon the rest
1ec40 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ec50 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71          of the q
1ec60 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74  uery.  This dest
1ec70 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20  ination implies 
1ec80 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a  "LIMIT 1"..**.**
1ec90 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20       SRT_Set    
1eca0 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20       The result 
1ecb0 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65  must be a single
1ecc0 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20   column.  Store 
1ecd0 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20  each.**         
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20              row 
1ecf0 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65  of result as the
1ed00 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44   key in table pD
1ed10 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed30 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61       Apply the a
1ed40 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61  ffinity pDest->a
1ed50 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74  ffSdst before st
1ed60 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20  oring.**        
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
1ed80 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69  ults.  Used to i
1ed90 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45  mplement "IN (SE
1eda0 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a  LECT ...)"..**.*
1edb0 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54  *     SRT_EphemT
1edc0 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20  ab    Create an 
1edd0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1ede0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61  pDest->iSDParm a
1edf0 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20  nd store.**     
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee10 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65  the result there
1ee20 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  . The cursor is 
1ee30 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a  left open after.
1ee40 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ee50 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67         returning
1ee60 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20  .  This is like 
1ee70 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74  SRT_Table except
1ee80 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20   that.**        
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1eea0 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73  s destination us
1eeb0 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  es OP_OpenEpheme
1eec0 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a  ral to create.**
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eee0 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66       the table f
1eef0 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  irst..**.**     
1ef00 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
1ef10 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f  Generate a co-ro
1ef20 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72  utine that retur
1ef30 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a  ns a new row of.
1ef40 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ef50 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65         results e
1ef60 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69  ach time it is i
1ef70 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74  nvoked.  The ent
1ef80 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20  ry point.**     
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efa0 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e  of the co-routin
1efb0 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  e is stored in r
1efc0 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
1efd0 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20  SDParm.**       
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
1eff0 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77  d the result row
1f000 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44   is stored in pD
1f010 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73  est->nDest regis
1f020 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ters.**         
1f030 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
1f040 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d  ting with pDest-
1f050 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  >iSdst..**.**   
1f060 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20    SRT_Table     
1f070 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1f080 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  in temporary tab
1f090 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1f0a0 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69  m..**     SRT_Fi
1f0b0 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69  fo        This i
1f0c0 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d  s like SRT_Ephem
1f0d0 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20  Tab except that 
1f0e0 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20  the table.**    
1f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f100 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61   is assumed to a
1f110 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20  lready be open. 
1f120 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a   SRT_Fifo has.**
1f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f140 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f       the additio
1f150 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20  nal property of 
1f160 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67  being able to ig
1f170 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  nore.**         
1f180 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1f190 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1f1a0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1f1b0 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65  istFifo    Store
1f1c0 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65   results in a te
1f1d0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1f1e0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f200 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73       But also us
1f210 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
1f220 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1f230 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  +1 as.**        
1f240 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72               a r
1f250 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69  ecord of all pri
1f260 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69  or results and i
1f270 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63  gnore any duplic
1f280 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ate.**          
1f290 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e             rows.
1f2a0 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22    Name means:  "
1f2b0 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a  Distinct Fifo"..
1f2c0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75  **.**     SRT_Qu
1f2d0 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  eue       Store 
1f2e0 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
1f2f0 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
1f300 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79  >iSDParm (really
1f310 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f320 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78          an index
1f330 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71  ).  Append a seq
1f340 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20  uence number so 
1f350 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73  that all entries
1f360 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f370 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74          are dist
1f380 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  inct..**.**     
1f390 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
1f3a0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1f3b0 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
1f3c0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f  pDest->iSDParm o
1f3d0 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20  nly if.**       
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1f3f0 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61  e same record ha
1f400 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f  s never been sto
1f410 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65  red before.  The
1f420 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f430 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74          index at
1f440 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1f450 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72  1 hold all prior
1f460 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66   stores..*/.#def
1f470 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20  ine SRT_Union   
1f480 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65       1  /* Store
1f490 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20   result as keys 
1f4a0 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
1f4b0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70  define SRT_Excep
1f4c0 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65  t       2  /* Re
1f4d0 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d  move result from
1f4e0 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a   a UNION index *
1f4f0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
1f500 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a  ists       3  /*
1f510 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20   Store 1 if the 
1f520 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d  result is not em
1f530 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
1f540 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20  RT_Discard      
1f550 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76  4  /* Do not sav
1f560 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e  e the results an
1f570 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  ywhere */.#defin
1f580 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20  e SRT_Fifo      
1f590 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72     5  /* Store r
1f5a0 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
1f5b0 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
1f5c0 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
1f5d0 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20   SRT_DistFifo   
1f5e0 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    6  /* Like SRT
1f5f0 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75  _Fifo, but uniqu
1f600 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
1f610 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75  /.#define SRT_Qu
1f620 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a  eue        7  /*
1f630 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
1f640 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65   an queue */.#de
1f650 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65  fine SRT_DistQue
1f660 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65  ue    8  /* Like
1f670 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20   SRT_Queue, but 
1f680 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
1f690 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f  nly */../* The O
1f6a0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
1f6b0 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c  s ignored for al
1f6c0 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a  l of the above *
1f6d0 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61  /.#define Ignora
1f6e0 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28  bleOrderby(X) ((
1f6f0 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44  X->eDest)<=SRT_D
1f700 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69  istQueue)..#defi
1f710 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20  ne SRT_Output   
1f720 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74      9  /* Output
1f730 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73   each row of res
1f740 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
1f750 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31  RT_Mem         1
1f760 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
1f770 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63  lt in a memory c
1f780 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ell */.#define S
1f790 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31  RT_Set         1
1f7a0 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
1f7b0 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61  lts as keys in a
1f7c0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
1f7d0 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ne SRT_EphemTab 
1f7e0 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65     12  /* Create
1f7f0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61   transient tab a
1f800 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52  nd store like SR
1f810 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  T_Table */.#defi
1f820 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65  ne SRT_Coroutine
1f830 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61     13  /* Genera
1f840 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  te a single row 
1f850 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
1f860 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20  fine SRT_Table  
1f870 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72       14  /* Stor
1f880 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
1f890 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
1f8a0 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a  ic rowid */../*.
1f8b0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1f8c0 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65  f this object de
1f8d0 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f  scribes where to
1f8e0 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75   put of the resu
1f8f0 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45  lts of.** a SELE
1f900 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
1f910 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65  .struct SelectDe
1f920 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b  st {.  u8 eDest;
1f930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
1f940 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66  ow to dispose of
1f950 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f   the results.  O
1f960 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65  n of SRT_* above
1f970 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61  . */.  int iSDPa
1f980 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  rm;         /* A
1f990 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20   parameter used 
1f9a0 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73  by the eDest dis
1f9b0 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a  posal method */.
1f9c0 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20    int iSdst;    
1f9d0 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
1f9e0 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65  egister where re
1f9f0 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65  sults are writte
1fa00 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74  n */.  int nSdst
1fa10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1fa20 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
1fa30 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  rs allocated */.
1fa40 20 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74    char *zAffSdst
1fa50 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69  ;      /* Affini
1fa60 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65  ty used when eDe
1fa70 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20  st==SRT_Set */. 
1fa80 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
1fa90 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c  rBy;  /* Key col
1faa0 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65  umns for SRT_Que
1fab0 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51  ue and SRT_DistQ
1fac0 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ueue */.};../*.*
1fad0 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65  * During code ge
1fae0 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74  neration of stat
1faf0 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69  ements that do i
1fb00 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f  nserts into AUTO
1fb10 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62  INCREMENT.** tab
1fb20 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  les, the followi
1fb30 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ng information i
1fb40 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
1fb50 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e  e Table.u.autoIn
1fb60 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f  c.p.** pointer o
1fb70 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65  f each autoincre
1fb80 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65  ment table to re
1fb90 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69  cord some side i
1fba0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a  nformation that.
1fbb0 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  ** the code gene
1fbc0 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65  rator needs.  We
1fbd0 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65   have to keep pe
1fbe0 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72  r-table autoincr
1fbf0 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ement.** informa
1fc00 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73  tion in case ins
1fc10 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69  erts are done wi
1fc20 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20  thin triggers.  
1fc30 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a  Triggers do not.
1fc40 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72  ** normally coor
1fc50 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74  dinate their act
1fc60 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20  ivities, but we 
1fc70 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64  do need to coord
1fc80 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61  inate the.** loa
1fc90 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20  ding and saving 
1fca0 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  of autoincrement
1fcb0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1fcc0 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49  .struct AutoincI
1fcd0 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49  nfo {.  AutoincI
1fce0 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a  nfo *pNext;   /*
1fcf0 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b   Next info block
1fd00 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68   in a list of th
1fd10 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c  em all */.  Tabl
1fd20 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
1fd30 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20    /* Table this 
1fd40 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72  info block refer
1fd50 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44  s to */.  int iD
1fd60 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
1fd70 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69  /* Index in sqli
1fd80 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74  te3.aDb[] of dat
1fd90 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54  abase holding pT
1fda0 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43  ab */.  int regC
1fdb0 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
1fdc0 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
1fdd0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77   holding the row
1fde0 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b  id counter */.};
1fdf0 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
1fe00 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
1fe10 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1fe20 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1fe30 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20  ted for each.** 
1fe40 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1fe50 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1fe60 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1fe70 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1fe80 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1fe90 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1fea0 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1feb0 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1fec0 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1fed0 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1fee0 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1fef0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1ff00 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1ff10 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1ff20 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1ff30 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1ff40 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1ff50 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1ff60 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1ff70 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1ff80 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1ff90 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1ffa0 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1ffb0 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1ffc0 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1ffd0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1ffe0 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1fff0 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
20000 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
20010 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
20020 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
20030 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
20040 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
20050 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
20060 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
20070 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
20080 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
20090 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
200a0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
200b0 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
200c0 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
200d0 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
200e0 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a  ult of INSERT.**
200f0 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69   statements). Si
20100 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69  milarly, the Tri
20110 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
20120 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [1] variable is 
20130 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b  set to.** a mask
20140 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
20150 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  s used by the pr
20160 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74  ogram..*/.struct
20170 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20   TriggerPrg {.  
20180 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
20190 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67  r;      /* Trigg
201a0 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20  er this program 
201b0 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a  was coded from *
201c0 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
201d0 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
201e0 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72  ext entry in Par
201f0 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
20200 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67  ist */.  SubProg
20210 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
20220 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c   /* Program impl
20230 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65  ementing pTrigge
20240 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e  r/orconf */.  in
20250 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  t orconf;       
20260 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
20270 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
20280 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f  icy */.  u32 aCo
20290 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20  lmask[2];       
202a0 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64   /* Masks of old
202b0 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e  .*, new.* column
202c0 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b  s accessed */.};
202d0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d  ../*.** The yDbM
202e0 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72  ask datatype for
202f0 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20   the bitmask of 
20300 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
20310 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53  abases..*/.#if S
20320 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
20330 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20  ED>30.  typedef 
20340 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44  unsigned char yD
20350 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41  bMask[(SQLITE_MA
20360 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d  X_ATTACHED+9)/8]
20370 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
20380 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
20390 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28  (M)[(I)/8]&(1<<(
203a0 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64  (I)&7)))!=0).# d
203b0 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
203c0 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28  (M)      memset(
203d0 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29  (M),0,sizeof(M))
203e0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
203f0 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
20400 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49  [(I)/8]|=(1<<((I
20410 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44  )&7)).# define D
20420 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
20430 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41    sqlite3DbMaskA
20440 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69  llZero(M).# defi
20450 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
20460 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62  (M)   (sqlite3Db
20470 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d  MaskAllZero(M)==
20480 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  0).#else.  typed
20490 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
204a0 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e  yDbMask;.# defin
204b0 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
204c0 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44  )    (((M)&(((yD
204d0 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21  bMask)1)<<(I)))!
204e0 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
204f0 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
20500 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  (M)=0.# define D
20510 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
20520 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73    (M)|=(((yDbMas
20530 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66  k)1)<<(I)).# def
20540 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
20550 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20  o(M)   (M)==0.# 
20560 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
20570 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30  Zero(M)   (M)!=0
20580 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
20590 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
205a0 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
205b0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
205c0 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
205d0 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
205e0 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
205f0 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
20600 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
20610 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
20620 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
20630 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
20640 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
20650 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
20660 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
20670 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
20680 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
20690 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
206a0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
206b0 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
206c0 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
206d0 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
206e0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
206f0 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
20700 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
20710 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
20720 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
20730 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
20740 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
20750 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
20760 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
20770 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
20780 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
20790 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20  ache.** feature 
207a0 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73  is enabled (if s
207b0 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65  qlite3Tsd()->use
207c0 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72  SharedData is tr
207d0 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a  ue). They are.**
207e0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
207f0 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d  he set of table-
20800 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62  locks required b
20810 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  y the statement 
20820 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65  being.** compile
20830 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69  d. Function sqli
20840 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69  te3TableLock() i
20850 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e  s used to add en
20860 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20  tries to the.** 
20870 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  list..*/.struct 
20880 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65  Parse {.  sqlite
20890 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
208a0 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * The main datab
208b0 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ase structure */
208c0 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
208d0 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72  ;       /* An er
208e0 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
208f0 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
20900 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69        /* An engi
20910 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67  ne for executing
20920 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f   database byteco
20930 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  de */.  int rc; 
20940 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20950 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
20960 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20   execution */.  
20970 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20  u8 colNamesSet; 
20980 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74       /* TRUE aft
20990 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65  er OP_ColumnName
209a0 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64   has been issued
209b0 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75   to pVdbe */.  u
209c0 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20  8 checkSchema;  
209d0 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63      /* Causes sc
209e0 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63  hema cookie chec
209f0 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
20a00 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b   */.  u8 nested;
20a10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20a20 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
20a30 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73  alls to the pars
20a40 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  er/code generato
20a50 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52  r */.  u8 nTempR
20a60 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  eg;         /* N
20a70 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61  umber of tempora
20a80 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  ry registers in 
20a90 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20  aTempReg[] */.  
20aa0 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b  u8 isMultiWrite;
20ab0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
20ac0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f  statement may mo
20ad0 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74  dify/insert mult
20ae0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75  iple rows */.  u
20af0 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20  8 mayAbort;     
20b00 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
20b10 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72  tatement may thr
20b20 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
20b30 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61  ption */.  u8 ha
20b40 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20  sCompound;      
20b50 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b  /* Need to invok
20b60 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  e convertCompoun
20b70 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
20b80 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f  y() */.  u8 okCo
20b90 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a  nstFactor;    /*
20ba0 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75   OK to factor ou
20bb0 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20  t constants */. 
20bc0 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61   u8 disableLooka
20bd0 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  side; /* Number 
20be0 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69  of times lookasi
20bf0 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61  de has been disa
20c00 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 64 69 73  bled */.  u8 dis
20c10 61 62 6c 65 56 74 61 62 3b 20 20 20 20 20 20 2f  ableVtab;      /
20c20 2a 20 44 69 73 61 62 6c 65 20 61 6c 6c 20 76 69  * Disable all vi
20c30 72 74 75 61 6c 20 74 61 62 6c 65 73 20 66 6f 72  rtual tables for
20c40 20 74 68 69 73 20 70 61 72 73 65 20 2a 2f 0a 20   this parse */. 
20c50 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
20c60 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
20c70 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
20c80 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
20c90 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
20ca0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
20cb0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
20cc0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
20cd0 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
20ce0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
20cf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
20d00 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
20d10 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
20d20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20d30 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
20d40 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
20d50 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
20d60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
20d70 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
20d80 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
20d90 72 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41  r */.  int szOpA
20da0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42  lloc;       /* B
20db0 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73  ytes of memory s
20dc0 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66  pace allocated f
20dd0 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
20de0 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b  .  int iSelfTab;
20df0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
20e00 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
20e10 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78 70   an index on exp
20e20 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20  r, or negative. 
20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e40 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
20e50 62 61 73 65 20 72 65 67 69 73 74 65 72 20 64 75  base register du
20e60 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74  ring check-const
20e70 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20  raint eval */.  
20e80 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
20e90 20 20 20 20 20 2f 2a 20 54 68 65 20 2a 6e 65 67       /* The *neg
20ea0 61 74 69 76 65 2a 20 6f 66 20 74 68 65 20 6e 75  ative* of the nu
20eb0 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75  mber of labels u
20ec0 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61  sed */.  int nLa
20ed0 62 65 6c 41 6c 6c 6f 63 3b 20 20 20 20 20 2f 2a  belAlloc;     /*
20ee0 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73   Number of slots
20ef0 20 69 6e 20 61 4c 61 62 65 6c 20 2a 2f 0a 20 20   in aLabel */.  
20f00 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20  int *aLabel;    
20f10 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f       /* Space to
20f20 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73   hold the labels
20f30 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
20f40 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f  pConstExpr;/* Co
20f50 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
20f60 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f  ns */.  Token co
20f70 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20  nstraintName;/* 
20f80 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73  Name of the cons
20f90 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  traint currently
20fa0 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f   being parsed */
20fb0 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65  .  yDbMask write
20fc0 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74  Mask;   /* Start
20fd0 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
20fe0 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61  tion on these da
20ff0 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62  tabases */.  yDb
21000 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b  Mask cookieMask;
21010 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20    /* Bitmask of 
21020 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20  schema verified 
21030 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69  databases */.  i
21040 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20  nt regRowid;    
21050 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
21060 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66  holding rowid of
21070 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e   CREATE TABLE en
21080 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  try */.  int reg
21090 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Root;         /*
210a0 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
210b0 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  g root page numb
210c0 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63  er for new objec
210d0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
210e0 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Arg;         /* 
210f0 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20  Max args passed 
21100 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
21110 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20   by sub-program 
21120 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74  */.  int nSelect
21130 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
21140 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74  ber of SELECT st
21150 6d 74 73 2e 20 43 6f 75 6e 74 65 72 20 66 6f 72  mts. Counter for
21160 20 53 65 6c 65 63 74 2e 73 65 6c 49 64 20 2a 2f   Select.selId */
21170 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21180 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
21190 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f  E.  int nTableLo
211a0 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ck;        /* Nu
211b0 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e  mber of locks in
211c0 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20   aTableLock */. 
211d0 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62   TableLock *aTab
211e0 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69  leLock; /* Requi
211f0 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20  red table locks 
21200 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  for shared-cache
21210 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   mode */.#endif.
21220 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
21230 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d  Ainc;  /* Inform
21240 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f  ation about AUTO
21250 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65  INCREMENT counte
21260 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  rs */.  Parse *p
21270 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20  Toplevel;    /* 
21280 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
21290 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  for main program
212a0 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20   (or NULL) */.  
212b0 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54  Table *pTriggerT
212c0 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72  ab;  /* Table tr
212d0 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67  iggers are being
212e0 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20   coded for */.  
212f0 50 61 72 73 65 20 2a 70 50 61 72 65 6e 74 50 61  Parse *pParentPa
21300 72 73 65 3b 20 2f 2a 20 50 61 72 65 6e 74 20 70  rse; /* Parent p
21310 61 72 73 65 72 20 69 66 20 74 68 69 73 20 70 61  arser if this pa
21320 72 73 65 72 20 69 73 20 6e 65 73 74 65 64 20 2a  rser is nested *
21330 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
21340 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
21350 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
21360 42 74 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Btree opcode on 
21370 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
21380 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70    u32 nQueryLoop
21390 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75  ;      /* Est nu
213a0 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
213b0 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31  ns of a query (1
213c0 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20  0*log2(N)) */.  
213d0 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
213e0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
213f0 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
21400 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
21410 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
21420 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
21430 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
21440 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
21450 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
21460 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
21470 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
21480 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
21490 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
214a0 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
214b0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
214c0 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
214d0 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
214e0 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
214f0 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
21500 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a  ggers */..  /***
21510 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21550 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65  *******.  ** Fie
21560 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62  lds above must b
21570 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
21580 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c   zero.  The fiel
21590 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a  ds that follow,.
215a0 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65    ** down to the
215b0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
215c0 65 20 72 65 63 75 72 73 69 76 65 20 73 65 63 74  e recursive sect
215d0 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64  ion, do not need
215e0 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74   to be.  ** init
215f0 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20  ialized as they 
21600 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f  will be set befo
21610 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  re being used.  
21620 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a  The boundary is.
21630 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20    ** determined 
21640 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  by offsetof(Pars
21650 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a 20 20 2a  e,aTempReg)..  *
21660 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e  *********/..  in
216b0 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
216c0 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67        /* Holding
216d0 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72   area for tempor
216e0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f  ary registers */
216f0 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
21700 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f  ken;       /* To
21710 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
21720 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
21730 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a  ct name */..  /*
21740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21780 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
21790 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
217a0 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
217b0 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
217c0 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
217d0 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
217e0 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
217f0 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
21800 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
21810 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
21820 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
21830 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f  of(Parse,sLastTo
21840 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73  ken) so the sLas
21850 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73  tToken field mus
21860 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69  t be the.  ** fi
21870 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65  rst field in the
21880 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
21890 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
218a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
218b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
218c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
218d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
218e0 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b    Token sLastTok
218f0 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  en;       /* The
21900 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
21910 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56  ed */.  ynVar nV
21920 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
21930 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
21940 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
21950 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
21960 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  far */.  u8 iPkS
21970 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
21980 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
21990 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
219a0 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
219b0 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
219c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
219d0 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
219e0 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
219f0 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
21a00 66 20 21 28 64 65 66 69 6e 65 64 28 53 51 4c 49  f !(defined(SQLI
21a10 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21a20 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64  ABLE) && defined
21a30 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  (SQLITE_OMIT_ALT
21a40 45 52 54 41 42 4c 45 29 29 0a 20 20 75 38 20 65  ERTABLE)).  u8 e
21a50 50 61 72 73 65 4d 6f 64 65 3b 20 20 20 20 20 20  ParseMode;      
21a60 20 20 20 20 20 20 2f 2a 20 50 41 52 53 45 5f 4d        /* PARSE_M
21a70 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74  ODE_XXX constant
21a80 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
21a90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
21aa0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
21ab0 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
21ac0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21ad0 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
21ae0 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
21af0 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69  endif.  int nHei
21b00 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
21b10 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
21b20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
21b30 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
21b40 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
21b50 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
21b60 0a 20 20 69 6e 74 20 61 64 64 72 45 78 70 6c 61  .  int addrExpla
21b70 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  in;          /* 
21b80 41 64 64 72 65 73 73 20 6f 66 20 63 75 72 72 65  Address of curre
21b90 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70  nt OP_Explain op
21ba0 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
21bb0 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20   VList *pVList; 
21bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
21bd0 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61  pping between va
21be0 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64  riable names and
21bf0 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64   numbers */.  Vd
21c00 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
21c10 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
21c20 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
21c30 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
21c40 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ()) */.  const c
21c50 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
21c60 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
21c70 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
21c80 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
21c90 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
21ca0 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
21cb0 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
21cc0 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
21cd0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
21ce0 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 77 49 6e  .  Index *pNewIn
21cf0 64 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dex;         /* 
21d00 41 6e 20 69 6e 64 65 78 20 62 65 69 6e 67 20 63  An index being c
21d10 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
21d20 45 41 54 45 20 49 4e 44 45 58 2e 0a 20 20 20 20  EATE INDEX..    
21d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d40 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73 6f 20          ** Also 
21d50 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 72 65 64  used to hold red
21d60 75 6e 64 61 6e 74 20 55 4e 49 51 55 45 20 63 6f  undant UNIQUE co
21d70 6e 73 74 72 61 69 6e 74 73 0a 20 20 20 20 20 20  nstraints.      
21d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d90 20 20 20 20 20 20 2a 2a 20 64 75 72 69 6e 67 20        ** during 
21da0 61 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20  a RENAME COLUMN 
21db0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
21dc0 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
21dd0 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
21de0 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
21df0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
21e00 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
21e10 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
21e20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
21e30 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
21e40 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e  allbacks */.#ifn
21e50 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21e60 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54  VIRTUALTABLE.  T
21e70 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20  oken sArg;      
21e80 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
21e90 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d  lete text of a m
21ea0 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a  odule argument *
21eb0 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74  /.  Table **apVt
21ec0 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a  abLock;       /*
21ed0 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74   Pointer to virt
21ee0 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69  ual tables needi
21ef0 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65  ng locking */.#e
21f00 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a  ndif.  Table *pZ
21f10 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20  ombieTab;       
21f20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c   /* List of Tabl
21f30 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c  e objects to del
21f40 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67  ete after code g
21f50 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  en */.  TriggerP
21f60 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b  rg *pTriggerPrg;
21f70 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
21f80 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65   of coded trigge
21f90 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  rs */.  With *pW
21fa0 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  ith;            
21fb0 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54    /* Current WIT
21fc0 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
21fd0 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  L */.  With *pWi
21fe0 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20  thToFree;       
21ff0 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57 49   /* Free this WI
22000 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65  TH object at the
22010 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73   end of the pars
22020 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e */.#ifndef SQL
22030 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
22040 42 4c 45 0a 20 20 52 65 6e 61 6d 65 54 6f 6b 65  BLE.  RenameToke
22050 6e 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20 20  n *pRename;     
22060 2f 2a 20 54 6f 6b 65 6e 73 20 73 75 62 6a 65 63  /* Tokens subjec
22070 74 20 74 6f 20 72 65 6e 61 6d 69 6e 67 20 62 79  t to renaming by
22080 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a   ALTER TABLE */.
22090 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64 65 66 69  #endif.};..#defi
220a0 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f  ne PARSE_MODE_NO
220b0 52 4d 41 4c 20 20 20 20 20 20 20 20 30 0a 23 64  RMAL        0.#d
220c0 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45  efine PARSE_MODE
220d0 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 20 31  _DECLARE_VTAB  1
220e0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d  .#define PARSE_M
220f0 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d  ODE_RENAME_COLUM
22100 4e 20 32 0a 23 64 65 66 69 6e 65 20 50 41 52 53  N 2.#define PARS
22110 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 54 41  E_MODE_RENAME_TA
22120 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a 20 53 69  BLE  3../*.** Si
22130 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73  zes and pointers
22140 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72 74   of various part
22150 73 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f  s of the Parse o
22160 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  bject..*/.#defin
22170 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f  e PARSE_HDR_SZ o
22180 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 54  ffsetof(Parse,aT
22190 65 6d 70 52 65 67 29 20 2f 2a 20 52 65 63 75 72  empReg) /* Recur
221a0 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43  sive part w/o aC
221b0 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e  olCache*/.#defin
221c0 65 20 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  e PARSE_RECURSE_
221d0 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  SZ offsetof(Pars
221e0 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20  e,sLastToken)   
221f0 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61   /* Recursive pa
22200 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  rt */.#define PA
22210 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a  RSE_TAIL_SZ (siz
22220 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53 45  eof(Parse)-PARSE
22230 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20  _RECURSE_SZ) /* 
22240 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61  Non-recursive pa
22250 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  rt */.#define PA
22260 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63  RSE_TAIL(X) (((c
22270 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f  har*)(X))+PARSE_
22280 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20  RECURSE_SZ)  /* 
22290 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20  Pointer to tail 
222a0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  */../*.** Return
222b0 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
222c0 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
222d0 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
222e0 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
222f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22300 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
22310 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
22320 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
22330 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
22340 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
22350 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3d 3d 50 41  ->eParseMode==PA
22360 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45  RSE_MODE_DECLARE
22370 5f 56 54 41 42 29 0a 23 65 6e 64 69 66 0a 0a 23  _VTAB).#endif..#
22380 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
22390 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
223a0 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  E).  #define IN_
223b0 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 30 0a  RENAME_OBJECT 0.
223c0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
223d0 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54  IN_RENAME_OBJECT
223e0 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65   (pParse->eParse
223f0 4d 6f 64 65 3e 3d 50 41 52 53 45 5f 4d 4f 44 45  Mode>=PARSE_MODE
22400 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 0a  _RENAME_COLUMN).
22410 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
22420 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22430 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26  VIRTUALTABLE) &&
22440 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
22450 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29  OMIT_ALTERTABLE)
22460 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 53 50  .  #define IN_SP
22470 45 43 49 41 4c 5f 50 41 52 53 45 20 30 0a 23 65  ECIAL_PARSE 0.#e
22480 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
22490 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20 28  _SPECIAL_PARSE (
224a0 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f  pParse->eParseMo
224b0 64 65 21 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 4e  de!=PARSE_MODE_N
224c0 4f 52 4d 41 4c 29 0a 23 65 6e 64 69 66 0a 0a 2f  ORMAL).#endif../
224d0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
224e0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
224f0 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
22500 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
22510 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
22520 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
22530 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
22540 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
22550 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
22560 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
22570 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
22580 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
22590 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
225a0 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
225b0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
225c0 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
225d0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
225e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
225f0 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
22600 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
22610 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
22620 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
22630 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20   opcodes..**.** 
22640 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
22650 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
22660 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
22670 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
22680 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46  G    == SQLITE_F
22690 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20  UNC_LENGTH.**   
226a0 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
226b0 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46  G    == SQLITE_F
226c0 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20  UNC_TYPEOF.**   
226d0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
226e0 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55       == BTREE_BU
226f0 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46  LKLOAD.**    OPF
22700 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
22710 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45   == BTREE_SEEK_E
22720 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46  Q.**    OPFLAG_F
22730 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  ORDELETE    == B
22740 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a  TREE_FORDELETE.*
22750 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45  *    OPFLAG_SAVE
22760 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45  POSITION == BTRE
22770 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a  E_SAVEPOSITION.*
22780 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44  *    OPFLAG_AUXD
22790 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45  ELETE    == BTRE
227a0 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23  E_AUXDELETE.*/.#
227b0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
227c0 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
227d0 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74      /* OP_Insert
227e0 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  : Set to update 
227f0 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20  db->nChange */. 
22800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22820 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64      /* Also used
22830 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20   in P2 (not P5) 
22840 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  of OP_Delete */.
22850 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
22860 4f 43 48 4e 47 20 20 20 20 20 20 20 20 30 78 30  OCHNG        0x0
22870 31 20 20 20 20 2f 2a 20 4f 50 5f 56 43 6f 6c 75  1    /* OP_VColu
22880 6d 6e 20 6e 6f 63 68 61 6e 67 65 20 66 6f 72 20  mn nochange for 
22890 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
228a0 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20  e OPFLAG_EPHEM  
228b0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
228c0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68  * OP_Column: Eph
228d0 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73  emeral output is
228e0 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f   ok */.#define O
228f0 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
22900 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53      0x20    /* S
22910 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
22920 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64  >lastRowid */.#d
22930 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55  efine OPFLAG_ISU
22940 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20  PDATE      0x04 
22950 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e     /* This OP_In
22960 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55  sert is an sql U
22970 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
22980 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20   OPFLAG_APPEND  
22990 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a        0x08    /*
229a0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20   This is likely 
229b0 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20  to be an append 
229c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
229d0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
229e0 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74  0x10    /* Try t
229f0 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69  o avoid a seek i
22a00 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20  n BtreeInsert() 
22a10 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22a20 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20  G_ISNOOP        
22a30 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x40    /* OP_De
22a40 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70  lete does pre-up
22a50 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a  date-hook only *
22a60 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22a70 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
22a80 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
22a90 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
22aa0 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
22ab0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
22ac0 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
22ad0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
22ae0 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
22af0 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
22b00 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
22b10 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
22b20 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
22b30 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
22b40 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
22b50 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
22b60 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
22b70 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72  OP_Open** cursor
22b80 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e   uses EQ seek on
22b90 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
22ba0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
22bb0 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50     0x08    /* OP
22bc0 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65  _Open should use
22bd0 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45   BTREE_FORDELETE
22be0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22bf0 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20  AG_P2ISREG      
22c00 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74   0x10    /* P2 t
22c10 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61  o OP_Open** is a
22c20 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
22c30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22c40 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20  AG_PERMUTE      
22c50 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
22c60 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20  ompare: use the 
22c70 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23  permutation */.#
22c80 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41  define OPFLAG_SA
22c90 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32  VEPOSITION  0x02
22ca0 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
22cb0 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75  /Insert: save cu
22cc0 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66  rsor pos */.#def
22cd0 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  ine OPFLAG_AUXDE
22ce0 4c 45 54 45 20 20 20 20 20 30 78 30 34 20 20 20  LETE     0x04   
22cf0 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69   /* OP_Delete: i
22d00 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45  ndex in a DELETE
22d10 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f   op */.#define O
22d20 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47  PFLAG_NOCHNG_MAG
22d30 49 43 20 20 30 78 36 64 20 20 20 20 2f 2a 20 4f  IC  0x6d    /* O
22d40 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73 65  P_MakeRecord: se
22d50 72 69 61 6c 74 79 70 65 20 31 30 20 69 73 20 6f  rialtype 10 is o
22d60 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  k */../*. * Each
22d70 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
22d80 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
22d90 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
22da0 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
22db0 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
22dc0 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69  igger.. *. * Poi
22dd0 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
22de0 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
22df0 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
22e00 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
22e10 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
22e20 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
22e30 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
22e40 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
22e50 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20  sents the. *    
22e60 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20  database). This 
22e70 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73  allows Trigger s
22e80 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20  tructures to be 
22e90 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d  retrieved by nam
22ea0 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69  e.. * 2. All tri
22eb0 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
22ec0 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74   with a single t
22ed0 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  able form a link
22ee0 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74  ed list, using t
22ef0 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d  he. *    pNext m
22f00 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20  ember of struct 
22f10 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74  Trigger. A point
22f20 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
22f30 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20  element of the. 
22f40 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74  *    linked list
22f50 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68   is stored as th
22f60 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d  e "pTrigger" mem
22f70 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63  ber of the assoc
22f80 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75  iated. *    stru
22f90 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20  ct Table.. *. * 
22fa0 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  The "step_list" 
22fb0 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f  member points to
22fc0 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
22fd0 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c  nt of a linked l
22fe0 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e  ist. * containin
22ff0 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
23000 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ents specified a
23010 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  s the trigger pr
23020 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63  ogram.. */.struc
23030 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68  t Trigger {.  ch
23040 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
23050 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d        /* The nam
23060 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  e of the trigger
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23080 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61          */.  cha
23090 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20  r *table;       
230a0 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c       /* The tabl
230b0 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
230c0 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61  ch the trigger a
230d0 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f  pplies */.  u8 o
230e0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
230f0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
23100 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
23110 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20  TE, TK_INSERT   
23120 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72        */.  u8 tr
23130 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  _tm;            
23140 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49     /* One of TRI
23150 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49  GGER_BEFORE, TRI
23160 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20  GGER_AFTER */.  
23170 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20  Expr *pWhen;    
23180 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
23190 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68  HEN clause of th
231a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61  e expression (ma
231b0 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
231c0 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73  IdList *pColumns
231d0 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ;       /* If th
231e0 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20  is is an UPDATE 
231f0 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  OF <column-list>
23200 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20   trigger,.      
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23220 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75         the <colu
23230 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72  mn-list> is stor
23240 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  ed here */.  Sch
23250 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
23260 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
23270 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
23280 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d  igger */.  Schem
23290 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20  a *pTabSchema;  
232a0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
232b0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
232c0 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  e */.  TriggerSt
232d0 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f  ep *step_list; /
232e0 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74  * Link list of t
232f0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73  rigger program s
23300 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20  teps            
23310 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
23320 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
23330 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73   Next trigger as
23340 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
23350 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
23360 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69  *.** A trigger i
23370 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52  s either a BEFOR
23380 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72  E or an AFTER tr
23390 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c  igger.  The foll
233a0 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a  owing constants.
233b0 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  ** determine whi
233c0 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ch..**.** If the
233d0 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20  re are multiple 
233e0 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69  triggers, you mi
233f0 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f  ght of some BEFO
23400 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45  RE and some AFTE
23410 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61  R..** In that ca
23420 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e  ses, the constan
23430 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20  ts below can be 
23440 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a  ORed together..*
23450 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  /.#define TRIGGE
23460 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66  R_BEFORE  1.#def
23470 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45  ine TRIGGER_AFTE
23480 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20  R   2../*. * An 
23490 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75  instance of stru
234a0 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69  ct TriggerStep i
234b0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
234c0 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61  a single SQL sta
234d0 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69  tement. * that i
234e0 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72  s a part of a tr
234f0 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
23500 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f  *. * Instances o
23510 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
23520 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20  Step are stored 
23530 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b  in a singly link
23540 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a  ed list (linked.
23550 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e   * using the "pN
23560 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66  ext" member) ref
23570 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22  erenced by the "
23580 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
23590 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f  r of the. * asso
235a0 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
235b0 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
235c0 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
235d0 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
235e0 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
235f0 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
23600 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
23610 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22  .. *. * The "op"
23620 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65   member indicate
23630 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  s whether this i
23640 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49  s a "DELETE", "I
23650 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22  NSERT", "UPDATE"
23660 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20   or. * "SELECT" 
23670 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d  statement. The m
23680 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f  eanings of the o
23690 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20  ther members is 
236a0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
236b0 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f  e. * value of "o
236c0 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
236d0 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
236e0 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
236f0 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
23700 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
23710 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
23720 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
23730 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
23740 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
23750 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
23760 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23770 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
23780 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
23790 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
237a0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
237b0 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
237c0 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
237d0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
237e0 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
237f0 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
23800 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
23810 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
23820 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
23830 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
23840 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
23850 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
23860 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
23870 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
23880 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
23890 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
238a0 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
238b0 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
238c0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
238d0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
238e0 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65   this stores the
238f0 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f   column-names to
23900 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20   be. *          
23910 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74      inserted int
23920 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  o.. *. * (op == 
23930 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54  TK_DELETE). * zT
23940 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
23950 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
23960 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
23970 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
23980 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
23990 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
239a0 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
239b0 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
239c0 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
239d0 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
239e0 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  LL.. *. * (op ==
239f0 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a   TK_UPDATE). * z
23a00 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
23a10 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
23a20 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
23a30 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
23a40 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
23a50 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
23a60 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
23a70 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
23a80 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
23a90 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
23aa0 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
23ab0 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
23ac0 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
23ad0 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
23ae0 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
23b00 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
23b10 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
23b20 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
23b30 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
23b40 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
23b50 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  . *. */.struct T
23b60 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
23b70 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
23b80 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
23b90 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
23ba0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
23bb0 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
23bc0 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
23bd0 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
23be0 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
23bf0 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
23c00 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
23c10 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
23c20 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
23c30 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
23c40 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
23c50 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53  statement or RHS
23c60 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
23c70 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20  SELECT ... */.  
23c80 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20  char *zTarget;  
23c90 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74       /* Target t
23ca0 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c  able for DELETE,
23cb0 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20   UPDATE, INSERT 
23cc0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
23cd0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  e;        /* The
23ce0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
23cf0 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  r DELETE or UPDA
23d00 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78  TE steps */.  Ex
23d10 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73  prList *pExprLis
23d20 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65  t; /* SET clause
23d30 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 20   for UPDATE */. 
23d40 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74   IdList *pIdList
23d50 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  ;     /* Column 
23d60 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54  names for INSERT
23d70 20 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a 70 55   */.  Upsert *pU
23d80 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 55 70  psert;     /* Up
23d90 73 65 72 74 20 63 6c 61 75 73 65 73 20 6f 6e 20  sert clauses on 
23da0 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63  an INSERT */.  c
23db0 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20  har *zSpan;     
23dc0 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
23dd0 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68 69 73  SQL text of this
23de0 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72   command */.  Tr
23df0 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74  iggerStep *pNext
23e00 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68  ;  /* Next in th
23e10 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20  e link-list */. 
23e20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c   TriggerStep *pL
23e30 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c  ast;  /* Last el
23e40 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69  ement in link-li
23e50 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73  st. Valid for 1s
23e60 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d  t elem only */.}
23e70 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
23e80 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
23e90 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
23ea0 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
23eb0 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a  e sqliteFix....*
23ec0 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68  * routines as th
23ed0 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73  ey walk the pars
23ee0 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64  e tree to make d
23ef0 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63  atabase referenc
23f00 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a  es.** explicit..
23f10 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
23f20 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
23f30 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
23f40 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
23f50 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
23f60 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
23f70 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
23f80 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
23f90 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
23fa0 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
23fb0 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
23fc0 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61  ema */.  int bVa
23fd0 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20  rOnly;       /* 
23fe0 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62  Check for variab
23ff0 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e  le references on
24000 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ly */.  const ch
24010 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
24020 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
24030 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
24040 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
24050 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
24060 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
24070 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
24080 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
24090 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
240a0 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
240b0 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
240c0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
240d0 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
240e0 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
240f0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
24100 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
24110 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
24120 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
24130 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
24140 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
24150 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
24160 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
24170 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
24180 74 20 73 71 6c 69 74 65 33 5f 73 74 72 20 7b 0a  t sqlite3_str {.
24190 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
241a0 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e         /* Option
241b0 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20  al database for 
241c0 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20  lookaside.  Can 
241d0 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61  be NULL */.  cha
241e0 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
241f0 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
24200 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
24210 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f   */.  u32  nAllo
24220 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d  c;         /* Am
24230 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c  ount of space al
24240 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74  located in zText
24250 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c   */.  u32  mxAll
24260 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  oc;        /* Ma
24270 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c  ximum allowed al
24280 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72  location.  0 for
24290 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65   no malloc usage
242a0 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72   */.  u32  nChar
242b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
242c0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
242d0 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  ng so far */.  u
242e0 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20  8   accError;   
242f0 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f      /* SQLITE_NO
24300 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45 5f 54 4f  MEM or SQLITE_TO
24310 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70  OBIG */.  u8   p
24320 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f  rintfFlags;    /
24330 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20  * SQLITE_PRINTF 
24340 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  flags below */.}
24350 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
24360 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c  _PRINTF_INTERNAL
24370 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e   0x01  /* Intern
24380 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76  al-use-only conv
24390 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a  erters allowed *
243a0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
243b0 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20  _PRINTF_SQLFUNC 
243c0 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66 75   0x02  /* SQL fu
243d0 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73  nction arguments
243e0 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a   to VXPrintf */.
243f0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
24400 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30  RINTF_MALLOCED 0
24410 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20  x04  /* True if 
24420 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63 61 74  xText is allocat
24430 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65  ed space */..#de
24440 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28  fine isMalloced(
24450 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69 6e 74  X)  (((X)->print
24460 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  fFlags & SQLITE_
24470 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29  PRINTF_MALLOCED)
24480 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70  !=0).../*.** A p
24490 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
244a0 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
244b0 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20   to communicate 
244c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66  information.** f
244d0 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20  rom sqlite3Init 
244e0 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65  and OP_ParseSche
244f0 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69  ma into the sqli
24500 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e  te3InitCallback.
24510 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
24520 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ct {.  sqlite3 *
24530 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
24540 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67  e database being
24550 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
24560 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73    char **pzErrMs
24570 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d  g;    /* Error m
24580 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65  essage stored he
24590 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  re */.  int iDb;
245a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
245b0 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61   for main databa
245c0 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c  se.  1 for TEMP,
245d0 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65   2.. for ATTACHe
245e0 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  d */.  int rc;  
245f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
24600 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64  sult code stored
24610 20 68 65 72 65 20 2a 2f 0a 20 20 75 33 32 20 6d   here */.  u32 m
24620 49 6e 69 74 46 6c 61 67 73 3b 20 20 20 20 20 2f  InitFlags;     /
24630 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 6c  * Flags controll
24640 69 6e 67 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ing error messag
24650 65 73 20 2a 2f 0a 20 20 75 33 32 20 6e 49 6e 69  es */.  u32 nIni
24660 74 52 6f 77 3b 20 20 20 20 20 20 20 2f 2a 20 4e  tRow;       /* N
24670 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 70 72  umber of rows pr
24680 6f 63 65 73 73 65 64 20 2a 2f 0a 7d 20 49 6e 69  ocessed */.} Ini
24690 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c  tData;../*.** Al
246a0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
246b0 20 6d 49 6e 69 74 46 6c 61 67 73 0a 2a 2f 0a 23   mInitFlags.*/.#
246c0 64 65 66 69 6e 65 20 49 4e 49 54 46 4c 41 47 5f  define INITFLAG_
246d0 41 6c 74 65 72 54 61 62 6c 65 20 20 20 30 78 30  AlterTable   0x0
246e0 30 30 31 20 20 2f 2a 20 54 68 69 73 20 69 73 20  001  /* This is 
246f0 61 20 72 65 70 61 72 73 65 20 61 66 74 65 72 20  a reparse after 
24700 41 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a 0a  ALTER TABLE */..
24710 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20  /*.** Structure 
24720 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61  containing globa
24730 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  l configuration 
24740 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c  data for the SQL
24750 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a  ite library..**.
24760 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
24770 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  e also contains 
24780 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72  some state infor
24790 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
247a0 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
247b0 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74  {.  int bMemstat
247c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
247d0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
247e0 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73   enable memory s
247f0 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62  tatus */.  int b
24800 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20  CoreMutex;      
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24820 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63  True to enable c
24830 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ore mutexing */.
24840 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78    int bFullMutex
24850 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24860 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
24870 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78  nable full mutex
24880 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70  ing */.  int bOp
24890 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20  enUri;          
248a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
248b0 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20  ue to interpret 
248c0 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49  filenames as URI
248d0 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43  s */.  int bUseC
248e0 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  is;             
248f0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
24900 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73  covering indices
24910 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20   for full-scans 
24920 2a 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d  */.  int bSmallM
24930 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  alloc;          
24940 20 20 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20         /* Avoid 
24950 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  large memory all
24960 6f 63 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65  ocations if true
24970 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c   */.  int mxStrl
24980 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
24990 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
249a0 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  um string length
249b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43   */.  int neverC
249c0 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20  orrupt;         
249d0 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
249e0 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65  ase is always we
249f0 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69  ll-formed */.  i
24a00 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
24a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
24a30 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
24a40 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
24a50 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
24a60 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
24a70 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
24a80 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
24a90 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20  int nStmtSpill; 
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ab0 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61    /* Stmt-journa
24ac0 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20  l spill-to-disk 
24ad0 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73  threshold */.  s
24ae0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
24af0 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ds m;           
24b00 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65   /* Low-level me
24b10 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
24b20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
24b30 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
24b40 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20  hods mutex;     
24b50 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75   /* Low-level mu
24b60 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  tex interface */
24b70 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  .  sqlite3_pcach
24b80 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68  e_methods2 pcach
24b90 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65  e2;  /* Low-leve
24ba0 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74  l page-cache int
24bb0 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64  erface */.  void
24bc0 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20   *pHeap;        
24bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24be0 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70   Heap storage sp
24bf0 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  ace */.  int nHe
24c00 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
24c10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
24c20 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f  ze of pHeap[] */
24c30 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78  .  int mnReq, mx
24c40 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Req;            
24c50 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20       /* Min and 
24c60 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74  max heap request
24c70 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c  s sizes */.  sql
24c80 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61  ite3_int64 szMma
24c90 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
24ca0 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70  * mmap() space p
24cb0 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a  er open file */.
24cc0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
24cd0 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  mxMmap;         
24ce0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76      /* Maximum v
24cf0 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20  alue for szMmap 
24d00 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
24d10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24d20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
24d30 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
24d40 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
24d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d60 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
24d70 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
24d80 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
24d90 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
24da0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
24db0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
24dc0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
24dd0 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
24de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24df0 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
24e00 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
24e10 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
24e20 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
24e30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
24e40 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
24e50 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
24e60 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20  */.  u32 szPma; 
24e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e80 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
24e90 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a  m Sorter PMA siz
24ea0 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62  e */.  /* The ab
24eb0 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69  ove might be ini
24ec0 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d  tialized to non-
24ed0 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  zero.  The follo
24ee0 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77  wing need to alw
24ef0 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c  ays.  ** initial
24f00 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65  ly be zero, howe
24f10 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ver. */.  int is
24f20 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
24f30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
24f40 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61  rue after initia
24f50 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e  lization has fin
24f60 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ished */.  int i
24f70 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  nProgress;      
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24f90 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69  True while initi
24fa0 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f  alization in pro
24fb0 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69  gress */.  int i
24fc0 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20  sMutexInit;     
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24fe0 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78  True after mutex
24ff0 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
25000 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61  ed */.  int isMa
25010 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20  llocInit;       
25020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
25030 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
25040 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
25050 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49  .  int isPCacheI
25060 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
25070 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
25080 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
25090 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
250a0 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b  t nRefInitMutex;
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
250d0 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78  rs of pInitMutex
250e0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
250f0 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
25100 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
25110 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
25120 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
25130 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28  .  void (*xLog)(
25140 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
25150 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74  char*); /* Funct
25160 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20  ion for logging 
25170 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41  */.  void *pLogA
25180 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
25190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
251a0 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
251b0 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  Log() */.#ifdef 
251c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51  SQLITE_ENABLE_SQ
251d0 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71  LLOG.  void(*xSq
251e0 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69  llog)(void*,sqli
251f0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
25200 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
25210 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64  pSqllogArg;.#end
25220 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
25230 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20  _VDBE_COVERAGE. 
25240 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
25250 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e  g callback (if n
25260 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f  ot NULL) is invo
25270 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42  ked on every VDB
25280 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70  E branch.  ** op
25290 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68  eration.  Set th
252a0 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67  e callback using
252b0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
252c0 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a  _VDBE_COVERAGE..
252d0 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56    */.  void (*xV
252e0 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a  dbeBranch)(void*
252f0 2c 75 6e 73 69 67 6e 65 64 20 69 53 72 63 4c 69  ,unsigned iSrcLi
25300 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65  ne,u8 eThis,u8 e
25310 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  Mx);  /* Callbac
25320 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64  k */.  void *pVd
25330 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20  beBranchArg;    
25340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
25370 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
25380 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
25390 44 45 53 45 52 49 41 4c 49 5a 45 0a 20 20 73 71  DESERIALIZE.  sq
253a0 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 65  lite3_int64 mxMe
253b0 6d 64 62 53 69 7a 65 3b 20 20 20 20 20 20 20 20  mdbSize;        
253c0 2f 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 20 6d  /* Default max m
253d0 65 6d 64 62 20 73 69 7a 65 20 2a 2f 0a 23 65 6e  emdb size */.#en
253e0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
253f0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20  TE_UNTESTABLE.  
25400 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62  int (*xTestCallb
25410 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20  ack)(int);      
25420 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20    /* Invoked by 
25430 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
25440 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  ) */.#endif.  in
25450 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
25460 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
25470 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
25480 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
25490 73 20 2a 2f 0a 20 20 69 6e 74 20 62 49 6e 74 65  s */.  int bInte
254a0 72 6e 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 20 20  rnalFunctions;  
254b0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
254c0 72 6e 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f  rnal SQL functio
254d0 6e 73 20 61 72 65 20 76 69 73 69 62 6c 65 20 2a  ns are visible *
254e0 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65 73  /.  int iOnceRes
254f0 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20 20  etThreshold;    
25500 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f        /* When to
25510 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63   reset OP_Once c
25520 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33 32  ounters */.  u32
25530 20 73 7a 53 6f 72 74 65 72 52 65 66 3b 20 20 20   szSorterRef;   
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25550 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e 20 62 79  * Min size in by
25560 74 65 73 20 74 6f 20 75 73 65 20 73 6f 72 74 65  tes to use sorte
25570 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  r-refs */.};../*
25580 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69  .** This macro i
25590 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66  s used inside of
255a0 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
255b0 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65  ents to indicate
255c0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73   that.** the ass
255d0 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ert is only vali
255e0 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  d on a well-form
255f0 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e  ed database.  In
25600 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20  stead of:.**.** 
25610 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b      assert( X );
25620 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65  .**.** One write
25630 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  s:.**.**     ass
25640 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50  ert( X || CORRUP
25650 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f  T_DB );.**.** CO
25660 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65  RRUPT_DB is true
25670 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f   during normal o
25680 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55  peration.  CORRU
25690 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69  PT_DB does not i
256a0 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20  ndicate.** that 
256b0 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
256c0 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75  definitely corru
256d0 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74  pt, only that it
256e0 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70   might be corrup
256f0 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74  t..** For most t
25700 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55  est cases, CORRU
25710 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20  PT_DB is set to 
25720 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70  false using a sp
25730 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33  ecial.** sqlite3
25740 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e  _test_control().
25750 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61    This enables a
25760 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
25770 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74  ts to prove.** t
25780 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61  hings that are a
25790 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77  lways true for w
257a0 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
257b0 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ases..*/.#define
257c0 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71   CORRUPT_DB  (sq
257d0 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65  lite3Config.neve
257e0 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a  rCorrupt==0)../*
257f0 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
25800 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
25810 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
25820 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
25830 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73   Walker {.  Pars
25840 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25860 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
25870 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
25880 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
25890 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
258a0 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
258b0 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
258c0 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
258d0 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
258e0 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
258f0 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
25900 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
25910 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43   void (*xSelectC
25920 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72  allback2)(Walker
25930 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65  *,Select*);/* Se
25940 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f  cond callback fo
25950 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69  r SELECTs */.  i
25960 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25980 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
25990 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
259a0 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20   */.  u8 eCode; 
259b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259d0 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65  /* A small proce
259e0 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20  ssing code */.  
259f0 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
25a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
25a20 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
25a30 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
25a40 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a60 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
25a70 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
25a80 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
25a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25aa0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f           /* A co
25ab0 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  unter */.    int
25ac0 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73         /* A curs
25af0 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
25b00 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
25b10 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
25b20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
25b30 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
25b40 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
25b50 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
25b60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
25b70 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
25b80 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20  ferences */.    
25b90 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20  struct CCurHint 
25ba0 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20  *pCCurHint;     
25bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
25bc0 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48  d by codeCursorH
25bd0 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74  int() */.    int
25be0 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20   *aiCol;        
25bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c00 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20         /* array 
25c10 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65  of column indexe
25c20 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
25c30 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f  IdxCover *pIdxCo
25c40 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ver;            
25c50 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
25c60 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a  index coverage *
25c70 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78  /.    struct Idx
25c80 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78 54  ExprTrans *pIdxT
25c90 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
25ca0 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64 78 65 64  /* Convert idxed
25cb0 20 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20   expr to column 
25cc0 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
25cd0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 20  *pGroupBy;      
25ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cf0 20 2f 2a 20 47 52 4f 55 50 20 42 59 20 63 6c 61   /* GROUP BY cla
25d00 75 73 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  use */.    Selec
25d10 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
25d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d30 20 20 20 20 20 2f 2a 20 48 41 56 49 4e 47 20 74       /* HAVING t
25d40 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63  o WHERE clause c
25d50 74 78 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  tx */.    struct
25d60 20 57 69 6e 64 6f 77 52 65 77 72 69 74 65 20 2a   WindowRewrite *
25d70 70 52 65 77 72 69 74 65 3b 20 20 20 20 20 20 20  pRewrite;       
25d80 20 20 20 20 2f 2a 20 57 69 6e 64 6f 77 20 72 65      /* Window re
25d90 77 72 69 74 65 20 63 6f 6e 74 65 78 74 20 2a 2f  write context */
25da0 0a 20 20 20 20 73 74 72 75 63 74 20 57 68 65 72  .    struct Wher
25db0 65 43 6f 6e 73 74 20 2a 70 43 6f 6e 73 74 3b 20  eConst *pConst; 
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25dd0 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63  * WHERE clause c
25de0 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 20 20  onstants */.    
25df0 73 74 72 75 63 74 20 52 65 6e 61 6d 65 43 74 78  struct RenameCtx
25e00 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20 20 20   *pRename;      
25e10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45 4e            /* REN
25e20 41 4d 45 20 43 4f 4c 55 4d 4e 20 63 6f 6e 74 65  AME COLUMN conte
25e30 78 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  xt */.  } u;.};.
25e40 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  ./* Forward decl
25e50 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20  arations */.int 
25e60 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28  sqlite3WalkExpr(
25e70 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
25e80 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
25e90 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a  ExprList(Walker*
25ea0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
25eb0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
25ec0 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ect(Walker*, Sel
25ed0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
25ee0 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72  e3WalkSelectExpr
25ef0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
25f00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
25f10 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61  alkSelectFrom(Wa
25f20 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
25f30 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
25f40 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a  WalkNoop(Walker*
25f50 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
25f60 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e  lite3SelectWalkN
25f70 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  oop(Walker*, Sel
25f80 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
25f90 65 33 53 65 6c 65 63 74 57 61 6c 6b 46 61 69 6c  e3SelectWalkFail
25fa0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
25fb0 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
25fc0 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c  E_DEBUG.void sql
25fd0 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 41 73  ite3SelectWalkAs
25fe0 73 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53  sert2(Walker*, S
25ff0 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a  elect*);.#endif.
26000 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f  ./*.** Return co
26010 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73  de from the pars
26020 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70  e-tree walking p
26030 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68  rimitives and th
26040 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73  eir.** callbacks
26050 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  ..*/.#define WRC
26060 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20  _Continue    0  
26070 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77   /* Continue dow
26080 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20  n into children 
26090 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50  */.#define WRC_P
260a0 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f  rune       1   /
260b0 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20  * Omit children 
260c0 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c  but continue wal
260d0 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f  king siblings */
260e0 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f  .#define WRC_Abo
260f0 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20  rt       2   /* 
26100 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65  Abandon the tree
26110 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   walk */../*.** 
26120 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
26130 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65  his structure re
26140 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f  presents a set o
26150 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54  f one or more CT
26160 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61  Es.** (common ta
26170 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29  ble expressions)
26180 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69   created by a si
26190 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
261a0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68  ..*/.struct With
261b0 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20   {.  int nCte;  
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
261e0 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49  f CTEs in the WI
261f0 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57  TH clause */.  W
26200 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20  ith *pOuter;    
26210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26220 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54  * Containing WIT
26230 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
26240 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74  L */.  struct Ct
26250 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  e {             
26260 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61         /* For ea
26270 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49  ch CTE in the WI
26280 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f  TH clause.... */
26290 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
262a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
262b0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
262c0 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
262d0 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b  ExprList *pCols;
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262f0 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69  /* List of expli
26300 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  cit column names
26310 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  , or NULL */.   
26320 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
26330 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26340 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69   /* The definiti
26350 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  on of this CTE *
26360 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  /.    const char
26370 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20   *zCteErr;      
26380 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d        /* Error m
26390 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75  essage for circu
263a0 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a  lar references *
263b0 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a  /.  } a[1];.};..
263c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
263d0 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  BUG./*.** An ins
263e0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65  tance of the Tre
263f0 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20  eView object is 
26400 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e  used for printin
26410 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
26420 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75  .** data structu
26430 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65  res on sqlite3De
26440 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e  bugPrintf() usin
26450 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69  g a tree-like vi
26460 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  ew..*/.struct Tr
26470 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69  eeView {.  int i
26480 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
26490 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65     /* Which leve
264a0 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65  l of the tree we
264b0 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20   are on */.  u8 
264c0 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20   bLine[100];    
264d0 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72       /* Draw ver
264e0 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20  tical in column 
264f0 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73  i if bLine[i] is
26500 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64   true */.};.#end
26510 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
26520 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  UG */../*.** Thi
26530 73 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64  s object is used
26540 20 69 6e 20 76 61 72 69 6f 75 73 20 77 61 79 73   in various ways
26550 2c 20 61 6c 6c 20 72 65 6c 61 74 65 64 20 74 6f  , all related to
26560 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
26570 73 0a 2a 2a 0a 2a 2a 20 20 20 28 31 29 20 41 20  s.**.**   (1) A 
26580 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20  single instance 
26590 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
265a0 65 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  e is attached to
265b0 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20 74 68   the.**       th
265c0 65 20 45 78 70 72 2e 70 57 69 6e 20 66 69 65 6c  e Expr.pWin fiel
265d0 64 20 66 6f 72 20 65 61 63 68 20 77 69 6e 64 6f  d for each windo
265e0 77 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 61 6e  w function in an
265f0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   expression tree
26600 2e 0a 2a 2a 20 20 20 20 20 20 20 54 68 69 73 20  ..**       This 
26610 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 74 68 65  object holds the
26620 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 6f 6e   information con
26630 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 4f 56  tained in the OV
26640 45 52 20 63 6c 61 75 73 65 2c 0a 2a 2a 20 20 20  ER clause,.**   
26650 20 20 20 20 70 6c 75 73 20 61 64 64 69 74 69 6f      plus additio
26660 6e 61 6c 20 66 69 65 6c 64 73 20 75 73 65 64 20  nal fields used 
26670 64 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  during code gene
26680 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20  ration..**.**   
26690 28 32 29 20 41 6c 6c 20 77 69 6e 64 6f 77 20 66  (2) All window f
266a0 75 6e 63 74 69 6f 6e 73 20 69 6e 20 61 20 73 69  unctions in a si
266b0 6e 67 6c 65 20 53 45 4c 45 43 54 20 66 6f 72 6d  ngle SELECT form
266c0 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 0a 2a   a linked-list.*
266d0 2a 20 20 20 20 20 20 20 61 74 74 61 63 68 65 64  *       attached
266e0 20 74 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e 2e   to Select.pWin.
266f0 20 20 54 68 65 20 57 69 6e 64 6f 77 2e 70 46 75    The Window.pFu
26700 6e 63 20 61 6e 64 20 57 69 6e 64 6f 77 2e 70 45  nc and Window.pE
26710 78 70 72 0a 2a 2a 20 20 20 20 20 20 20 66 69 65  xpr.**       fie
26720 6c 64 73 20 70 6f 69 6e 74 20 62 61 63 6b 20 74  lds point back t
26730 6f 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  o the expression
26740 20 74 68 61 74 20 69 73 20 74 68 65 20 77 69 6e   that is the win
26750 64 6f 77 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  dow function..**
26760 0a 2a 2a 20 20 20 28 33 29 20 54 68 65 20 74 65  .**   (3) The te
26770 72 6d 73 20 6f 66 20 74 68 65 20 57 49 4e 44 4f  rms of the WINDO
26780 57 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  W clause of a SE
26790 4c 45 43 54 20 61 72 65 20 69 6e 73 74 61 6e 63  LECT are instanc
267a0 65 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20 20 20  es of this.**   
267b0 20 20 20 20 6f 62 6a 65 63 74 20 6f 6e 20 61 20      object on a 
267c0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 61 74 74 61  linked list atta
267d0 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70  ched to Select.p
267e0 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a 2a 20 54  WinDefn..**.** T
267f0 68 65 20 75 73 65 73 20 28 31 29 20 61 6e 64 20  he uses (1) and 
26800 28 32 29 20 61 72 65 20 72 65 61 6c 6c 79 20 74  (2) are really t
26810 68 65 20 73 61 6d 65 20 57 69 6e 64 6f 77 20 6f  he same Window o
26820 62 6a 65 63 74 20 74 68 61 74 20 6a 75 73 74 20  bject that just 
26830 68 61 70 70 65 6e 73 0a 2a 2a 20 74 6f 20 62 65  happens.** to be
26840 20 61 63 63 65 73 73 69 62 6c 65 20 69 6e 20 74   accessible in t
26850 77 6f 20 64 69 66 66 65 72 65 6e 74 20 77 61 79  wo different way
26860 73 2e 20 20 55 73 65 20 63 61 73 65 20 28 33 29  s.  Use case (3)
26870 20 61 72 65 20 73 65 70 61 72 61 74 65 20 6f 62   are separate ob
26880 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
26890 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68 61 72   Window {.  char
268a0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
268b0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 77      /* Name of w
268c0 69 6e 64 6f 77 20 28 6d 61 79 20 62 65 20 4e 55  indow (may be NU
268d0 4c 4c 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  LL) */.  char *z
268e0 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  Base;           
268f0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 62 61 73 65   /* Name of base
26900 20 77 69 6e 64 6f 77 20 66 6f 72 20 63 68 61 69   window for chai
26910 6e 69 6e 67 20 28 6d 61 79 20 62 65 20 4e 55 4c  ning (may be NUL
26920 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  L) */.  ExprList
26930 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b 20 20 20   *pPartition;   
26940 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20 42 59 20  /* PARTITION BY 
26950 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
26960 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
26970 20 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20      /* ORDER BY 
26980 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20 65  clause */.  u8 e
26990 46 72 6d 54 79 70 65 3b 20 20 20 20 20 20 20 20  FrmType;        
269a0 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e 47 45 2c      /* TK_RANGE,
269b0 20 54 4b 5f 47 52 4f 55 50 53 2c 20 54 4b 5f 52   TK_GROUPS, TK_R
269c0 4f 57 53 2c 20 6f 72 20 30 20 2a 2f 0a 20 20 75  OWS, or 0 */.  u
269d0 38 20 65 53 74 61 72 74 3b 20 20 20 20 20 20 20  8 eStart;       
269e0 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e         /* UNBOUN
269f0 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52  DED, CURRENT, PR
26a00 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f  ECEDING or FOLLO
26a10 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20 65 45 6e  WING */.  u8 eEn
26a20 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
26a30 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20    /* UNBOUNDED, 
26a40 43 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44 49  CURRENT, PRECEDI
26a50 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20  NG or FOLLOWING 
26a60 2a 2f 0a 20 20 75 38 20 62 49 6d 70 6c 69 63 69  */.  u8 bImplici
26a70 74 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  tFrame;      /* 
26a80 54 72 75 65 20 69 66 20 66 72 61 6d 65 20 77 61  True if frame wa
26a90 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 73 70 65  s implicitly spe
26aa0 63 69 66 69 65 64 20 2a 2f 0a 20 20 75 38 20 65  cified */.  u8 e
26ab0 45 78 63 6c 75 64 65 3b 20 20 20 20 20 20 20 20  Exclude;        
26ac0 20 20 20 20 2f 2a 20 54 4b 5f 4e 4f 2c 20 54 4b      /* TK_NO, TK
26ad0 5f 43 55 52 52 45 4e 54 2c 20 54 4b 5f 54 49 45  _CURRENT, TK_TIE
26ae0 53 2c 20 54 4b 5f 47 52 4f 55 50 2c 20 6f 72 20  S, TK_GROUP, or 
26af0 30 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 53 74  0 */.  Expr *pSt
26b00 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
26b10 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f 72  * Expression for
26b20 20 22 3c 65 78 70 72 3e 20 50 52 45 43 45 44 49   "<expr> PRECEDI
26b30 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  NG" */.  Expr *p
26b40 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
26b50 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66   /* Expression f
26b60 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c 4c 4f  or "<expr> FOLLO
26b70 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e 64 6f  WING" */.  Windo
26b80 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20 20 20  w *pNextWin;    
26b90 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e 64 6f     /* Next windo
26ba0 77 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c 6f 6e  w function belon
26bb0 67 69 6e 67 20 74 6f 20 74 68 69 73 20 53 45 4c  ging to this SEL
26bc0 45 43 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ECT */.  Expr *p
26bd0 46 69 6c 74 65 72 3b 20 20 20 20 20 20 20 20 20  Filter;         
26be0 20 2f 2a 20 54 68 65 20 46 49 4c 54 45 52 20 65   /* The FILTER e
26bf0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 46  xpression */.  F
26c00 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
26c10 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 75         /* The fu
26c20 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  nction */.  int 
26c30 69 45 70 68 43 73 72 3b 20 20 20 20 20 20 20 20  iEphCsr;        
26c40 20 20 20 20 2f 2a 20 50 61 72 74 69 74 69 6f 6e      /* Partition
26c50 20 62 75 66 66 65 72 20 6f 72 20 50 65 65 72 20   buffer or Peer 
26c60 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20  buffer */.  int 
26c70 72 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e 74 20  regAccum;.  int 
26c80 72 65 67 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74  regResult;.  int
26c90 20 63 73 72 41 70 70 3b 20 20 20 20 20 20 20 20   csrApp;        
26ca0 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e       /* Function
26cb0 20 63 75 72 73 6f 72 20 28 75 73 65 64 20 62 79   cursor (used by
26cc0 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69   min/max) */.  i
26cd0 6e 74 20 72 65 67 41 70 70 3b 20 20 20 20 20 20  nt regApp;      
26ce0 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69         /* Functi
26cf0 6f 6e 20 72 65 67 69 73 74 65 72 20 28 61 6c 73  on register (als
26d00 6f 20 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61  o used by min/ma
26d10 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 50  x) */.  int regP
26d20 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
26d30 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 65 67 69  /* Array of regi
26d40 73 74 65 72 73 20 66 6f 72 20 50 41 52 54 49 54  sters for PARTIT
26d50 49 4f 4e 20 42 59 20 76 61 6c 75 65 73 20 2a 2f  ION BY values */
26d60 0a 20 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 3b  .  Expr *pOwner;
26d70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
26d80 70 72 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 20  pression object 
26d90 74 68 69 73 20 77 69 6e 64 6f 77 20 69 73 20 61  this window is a
26da0 74 74 61 63 68 65 64 20 74 6f 20 2a 2f 0a 20 20  ttached to */.  
26db0 69 6e 74 20 6e 42 75 66 66 65 72 43 6f 6c 3b 20  int nBufferCol; 
26dc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
26dd0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
26de0 62 75 66 66 65 72 20 74 61 62 6c 65 20 2a 2f 0a  buffer table */.
26df0 20 20 69 6e 74 20 69 41 72 67 43 6f 6c 3b 20 20    int iArgCol;  
26e00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66            /* Off
26e10 73 65 74 20 6f 66 20 66 69 72 73 74 20 61 72 67  set of first arg
26e20 75 6d 65 6e 74 20 66 6f 72 20 74 68 69 73 20 66  ument for this f
26e30 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  unction */.  int
26e40 20 72 65 67 4f 6e 65 3b 20 20 20 20 20 20 20 20   regOne;        
26e50 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
26e60 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6e 73   containing cons
26e70 74 61 6e 74 20 76 61 6c 75 65 20 31 20 2a 2f 0a  tant value 1 */.
26e80 20 20 69 6e 74 20 72 65 67 53 74 61 72 74 52 6f    int regStartRo
26e90 77 69 64 3b 0a 20 20 69 6e 74 20 72 65 67 45 6e  wid;.  int regEn
26ea0 64 52 6f 77 69 64 3b 0a 7d 3b 0a 0a 23 69 66 6e  dRowid;.};..#ifn
26eb0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26ec0 57 49 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20  WINDOWFUNC.void 
26ed0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c  sqlite3WindowDel
26ee0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 57 69  ete(sqlite3*, Wi
26ef0 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndow*);.void sql
26f00 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 65  ite3WindowListDe
26f10 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 64 62  lete(sqlite3 *db
26f20 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69  , Window *p);.Wi
26f30 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e  ndow *sqlite3Win
26f40 64 6f 77 41 6c 6c 6f 63 28 50 61 72 73 65 2a 2c  dowAlloc(Parse*,
26f50 20 69 6e 74 2c 20 69 6e 74 2c 20 45 78 70 72 2a   int, int, Expr*
26f60 2c 20 69 6e 74 20 2c 20 45 78 70 72 2a 2c 20 75  , int , Expr*, u
26f70 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
26f80 57 69 6e 64 6f 77 41 74 74 61 63 68 28 50 61 72  WindowAttach(Par
26f90 73 65 2a 2c 20 45 78 70 72 2a 2c 20 57 69 6e 64  se*, Expr*, Wind
26fa0 6f 77 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ow*);.int sqlite
26fb0 33 57 69 6e 64 6f 77 43 6f 6d 70 61 72 65 28 50  3WindowCompare(P
26fc0 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20  arse*, Window*, 
26fd0 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73  Window*);.void s
26fe0 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64 65  qlite3WindowCode
26ff0 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 57 69 6e  Init(Parse*, Win
27000 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dow*);.void sqli
27010 74 65 33 57 69 6e 64 6f 77 43 6f 64 65 53 74 65  te3WindowCodeSte
27020 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
27030 2a 2c 20 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  *, WhereInfo*, i
27040 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
27050 6c 69 74 65 33 57 69 6e 64 6f 77 52 65 77 72 69  lite3WindowRewri
27060 74 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  te(Parse*, Selec
27070 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
27080 45 78 70 61 6e 64 53 75 62 71 75 65 72 79 28 50  ExpandSubquery(P
27090 61 72 73 65 2a 2c 20 73 74 72 75 63 74 20 53 72  arse*, struct Sr
270a0 63 4c 69 73 74 5f 69 74 65 6d 2a 29 3b 0a 76 6f  cList_item*);.vo
270b0 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
270c0 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 57  Update(Parse*, W
270d0 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 2c  indow*, Window*,
270e0 20 46 75 6e 63 44 65 66 2a 29 3b 0a 57 69 6e 64   FuncDef*);.Wind
270f0 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
27100 77 44 75 70 28 73 71 6c 69 74 65 33 20 2a 64 62  wDup(sqlite3 *db
27110 2c 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 2c 20  , Expr *pOwner, 
27120 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64  Window *p);.Wind
27130 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
27140 77 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  wListDup(sqlite3
27150 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29   *db, Window *p)
27160 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
27170 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 76 6f  ndowFunctions(vo
27180 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
27190 33 57 69 6e 64 6f 77 43 68 61 69 6e 28 50 61 72  3WindowChain(Par
271a0 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69  se*, Window*, Wi
271b0 6e 64 6f 77 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a  ndow*);.Window *
271c0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 73 73  sqlite3WindowAss
271d0 65 6d 62 6c 65 28 50 61 72 73 65 2a 2c 20 57 69  emble(Parse*, Wi
271e0 6e 64 6f 77 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ndow*, ExprList*
271f0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  , ExprList*, Tok
27200 65 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  en*);.#else.# de
27210 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e 64  fine sqlite3Wind
27220 6f 77 44 65 6c 65 74 65 28 61 2c 62 29 0a 23 20  owDelete(a,b).# 
27230 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
27240 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 29 0a  ndowFunctions().
27250 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27260 57 69 6e 64 6f 77 41 74 74 61 63 68 28 61 2c 62  WindowAttach(a,b
27270 2c 63 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,c).#endif../*.*
27280 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
27290 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
272a0 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
272b0 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
272c0 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
272d0 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
272e0 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
272f0 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
27300 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
27310 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
27320 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
27330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
27340 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
27350 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
27360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27370 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
27380 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
27390 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
273a0 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
273b0 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
273c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273e0 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f            \.}../
273f0 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
27400 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
27410 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
27420 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
27430 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
27440 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
27450 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
27460 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
27470 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
27480 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
27490 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
274a0 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
274b0 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
274c0 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
274d0 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
274e0 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
274f0 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
27500 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
27510 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
27520 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
27530 71 6c 69 74 65 33 52 65 70 6f 72 74 45 72 72 6f  qlite3ReportErro
27540 72 28 69 6e 74 20 69 45 72 72 2c 20 69 6e 74 20  r(int iErr, int 
27550 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68  lineno, const ch
27560 61 72 20 2a 7a 54 79 70 65 29 3b 0a 69 6e 74 20  ar *zType);.int 
27570 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
27580 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
27590 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
275a0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
275b0 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
275c0 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
275d0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
275e0 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
275f0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
27600 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
27610 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
27620 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
27630 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
27640 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
27650 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
27660 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
27670 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54  __).#ifdef SQLIT
27680 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71  E_DEBUG.  int sq
27690 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
276a0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
276b0 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
276c0 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
276d0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
276e0 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29  oError(int,Pgno)
276f0 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ;.# define SQLIT
27700 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c  E_NOMEM_BKPT sql
27710 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f  ite3NomemError(_
27720 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e  _LINE__).# defin
27730 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  e SQLITE_IOERR_N
27740 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65  OMEM_BKPT sqlite
27750 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72  3IoerrnomemError
27760 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66  (__LINE__).# def
27770 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
27780 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74  PT_PGNO(P) sqlit
27790 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72  e3CorruptPgnoErr
277a0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29  or(__LINE__,(P))
277b0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
277c0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
277d0 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23  T SQLITE_NOMEM.#
277e0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
277f0 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
27800 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
27810 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
27820 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28  TE_CORRUPT_PGNO(
27830 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  P) sqlite3Corrup
27840 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
27850 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
27860 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74  TS3 and FTS4 bot
27870 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75 61  h require virtua
27880 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a  l table support.
27890 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
278a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
278b0 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66  ALTABLE).# undef
278c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
278d0 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  TS3.# undef SQLI
278e0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23  TE_ENABLE_FTS4.#
278f0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  endif../*.** FTS
27900 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65  4 is really an e
27910 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53  xtension for FTS
27920 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65  3.  It is enable
27930 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53  d using the.** S
27940 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27950 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f  3 macro.  But to
27960 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
27970 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a   we also call.**
27980 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
27990 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f  LE_FTS4 macro to
279a0 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69   serve as an ali
279b0 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e  as for SQLITE_EN
279c0 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69  ABLE_FTS3..*/.#i
279d0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
279e0 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26  _ENABLE_FTS4) &&
279f0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27a00 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20  _ENABLE_FTS3).# 
27a10 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
27a20 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64  ABLE_FTS3 1.#end
27a30 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
27a40 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
27a50 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
27a60 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
27a70 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
27a80 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
27a90 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
27aa0 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
27ab0 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
27ac0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
27ad0 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
27ae0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
27af0 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
27b00 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
27b10 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
27b20 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
27b30 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
27b40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
27b50 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
27b60 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
27b70 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
27b80 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
27b90 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
27ba0 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
27bb0 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
27bc0 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
27bd0 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
27be0 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
27bf0 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
27c00 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
27c10 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
27c20 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
27c30 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
27c40 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
27c50 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
27c60 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
27c70 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
27c80 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
27c90 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
27ca0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
27cb0 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
27cc0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
27cd0 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
27ce0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
27cf0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
27d00 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
27d10 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
27d20 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
27d30 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
27d40 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
27d50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
27d60 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
27d70 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
27d80 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
27d90 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
27da0 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
27db0 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
27dc0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
27dd0 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
27de0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
27df0 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
27e00 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
27e10 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27e20 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x)]).# define sq
27e30 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20  lite3Isquote(x) 
27e40 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
27e50 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
27e60 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c  r)(x)]&0x80).#el
27e70 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
27e80 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
27e90 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
27ea0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
27eb0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
27ec0 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
27ed0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
27ee0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
27ef0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
27f00 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
27f10 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
27f20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
27f30 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
27f40 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
27f50 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
27f60 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
27f70 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
27f80 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
27f90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27fa0 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
27fb0 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
27fc0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
27fd0 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
27fe0 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
27ff0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
28000 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
28010 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20  te3Isquote(x)   
28020 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d  ((x)=='"'||(x)==
28030 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c  '\''||(x)=='['||
28040 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66  (x)=='`').#endif
28050 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64  .int sqlite3IsId
28060 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a 0a 2a 2a  Char(u8);../*.**
28070 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
28080 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
28090 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49  .int sqlite3StrI
280a0 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Cmp(const char*,
280b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
280c0 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  t sqlite3Strlen3
280d0 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  0(const char*);.
280e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
280f0 74 72 6c 65 6e 33 30 4e 4e 28 43 29 20 28 73 74  trlen30NN(C) (st
28100 72 6c 65 6e 28 43 29 26 30 78 33 66 66 66 66 66  rlen(C)&0x3fffff
28110 66 66 29 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  ff).char *sqlite
28120 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75  3ColumnType(Colu
28130 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66  mn*,char*);.#def
28140 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
28150 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
28160 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
28170 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
28180 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
28190 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
281a0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
281b0 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  loc(u64);.void *
281c0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
281d0 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  o(u64);.void *sq
281e0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
281f0 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  o(sqlite3*, u64)
28200 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
28210 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
28220 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
28230 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
28240 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  RawNN(sqlite3*, 
28250 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  u64);.char *sqli
28260 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69  te3DbStrDup(sqli
28270 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
28280 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
28290 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65  DbStrNDup(sqlite
282a0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
282b0 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  u64);.char *sqli
282c0 74 65 33 44 62 53 70 61 6e 44 75 70 28 73 71 6c  te3DbSpanDup(sql
282d0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
282e0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
282f0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61  void *sqlite3Rea
28300 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29  lloc(void*, u64)
28310 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
28320 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73  bReallocOrFree(s
28330 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
28340 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
28350 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73  lite3DbRealloc(s
28360 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
28370 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c  , u64);.void sql
28380 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74  ite3DbFree(sqlit
28390 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
283a0 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e  d sqlite3DbFreeN
283b0 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  N(sqlite3*, void
283c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
283d0 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29  allocSize(void*)
283e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d  ;.int sqlite3DbM
283f0 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65  allocSize(sqlite
28400 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
28410 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c   *sqlite3PageMal
28420 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
28430 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76  qlite3PageFree(v
28440 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
28450 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74  te3MemSetDefault
28460 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20  (void);.#ifndef 
28470 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
28480 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  E.void sqlite3Be
28490 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28  nignMallocHooks(
284a0 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20  void (*)(void), 
284b0 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b  void (*)(void));
284c0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
284d0 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c  te3HeapNearlyFul
284e0 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20  l(void);../*.** 
284f0 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  On systems with 
28500 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63  ample stack spac
28510 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f  e and that suppo
28520 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b  rt alloca(), mak
28530 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f  e.** use of allo
28540 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73  ca() to obtain s
28550 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61  pace for large a
28560 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73  utomatic objects
28570 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a  .  By default,.*
28580 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  * obtain space f
28590 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a  rom malloc()..**
285a0 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29  .** The alloca()
285b0 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72   routine never r
285c0 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68  eturns NULL.  Th
285d0 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f  is will cause co
285e0 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74  de paths.** that
285f0 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74   deal with sqlit
28600 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66  e3StackAlloc() f
28610 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e  ailures to be un
28620 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69  reachable..*/.#i
28630 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f  fdef SQLITE_USE_
28640 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20  ALLOCA.# define 
28650 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
28660 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f  cRaw(D,N)   allo
28670 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  ca(N).# define s
28680 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
28690 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65  Zero(D,N)  memse
286a0 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20  t(alloca(N), 0, 
286b0 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
286c0 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
286d0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
286e0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
286f0 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c  ocRaw(D,N)   sql
28700 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
28710 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
28720 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
28730 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65  ero(D,N)  sqlite
28740 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c  3DbMallocZero(D,
28750 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
28760 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
28770 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  )       sqlite3D
28780 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69  bFree(D,P).#endi
28790 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  f../* Do not all
287a0 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35 20  ow both MEMSYS5 
287b0 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20 62  and MEMSYS3 to b
287c0 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74 68  e defined togeth
287d0 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a 20  er.  If they.** 
287e0 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d  are, disable MEM
287f0 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53  SYS3.*/.#ifdef S
28800 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
28810 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
28820 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
28830 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
28840 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64  sys5(void);.#und
28850 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
28860 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66 0a  _MEMSYS3.#endif.
28870 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
28880 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e  ABLE_MEMSYS3.con
28890 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
288a0 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
288b0 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69  emGetMemsys3(voi
288c0 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  d);.#endif...#if
288d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  ndef SQLITE_MUTE
288e0 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33  X_OMIT.  sqlite3
288f0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
28900 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66  onst *sqlite3Def
28910 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b  aultMutex(void);
28920 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
28930 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
28940 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78  sqlite3NoopMutex
28950 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
28960 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
28970 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b  MutexAlloc(int);
28980 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
28990 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20  texInit(void);. 
289a0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
289b0 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64  xEnd(void);.#end
289c0 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
289d0 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
289e0 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
289f0 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50  QLITE_MUTEX_NOOP
28a00 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
28a10 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f  MemoryBarrier(vo
28a20 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  id);.#else.# def
28a30 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72  ine sqlite3Memor
28a40 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69  yBarrier().#endi
28a50 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  f..sqlite3_int64
28a60 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
28a70 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
28a80 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28 69  qlite3StatusUp(i
28a90 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28aa0 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e  qlite3StatusDown
28ab0 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
28ac0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48 69   sqlite3StatusHi
28ad0 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e 74  ghwater(int, int
28ae0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f  );.int sqlite3Lo
28af0 6f 6b 61 73 69 64 65 55 73 65 64 28 73 71 6c 69  okasideUsed(sqli
28b00 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a 20  te3*,int*);../* 
28b10 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65  Access to mutexe
28b20 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
28b30 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71  3_status() */.sq
28b40 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
28b50 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65 78  ite3Pcache1Mutex
28b60 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f  (void);.sqlite3_
28b70 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61  mutex *sqlite3Ma
28b80 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b  llocMutex(void);
28b90 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
28ba0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54  LITE_ENABLE_MULT
28bb0 49 54 48 52 45 41 44 45 44 5f 43 48 45 43 4b 53  ITHREADED_CHECKS
28bc0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
28bd0 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29  LITE_MUTEX_OMIT)
28be0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 74  .void sqlite3Mut
28bf0 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69  exWarnOnContenti
28c00 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  on(sqlite3_mutex
28c10 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
28c20 6e 65 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57  ne sqlite3MutexW
28c30 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28  arnOnContention(
28c40 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  x).#endif..#ifnd
28c50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
28c60 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
28c70 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
28c80 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a  (double);.#else.
28c90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28ca0 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64  IsNaN(X)  0.#end
28cb0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
28cc0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
28cd0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
28ce0 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
28cf0 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20  on about SQL.** 
28d00 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65  functions argume
28d10 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65  nts that are the
28d20 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74   parameters to t
28d30 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63  he printf() func
28d40 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
28d50 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
28d60 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20  {.  int nArg;   
28d70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
28d80 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  Total number of 
28d90 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69  arguments */.  i
28da0 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20  nt nUsed;       
28db0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
28dc0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75  r of arguments u
28dd0 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
28de0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
28df0 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20  apArg;   /* The 
28e00 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20  argument values 
28e10 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73 71 6c  */.};..char *sql
28e20 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69  ite3MPrintf(sqli
28e30 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
28e40 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
28e50 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71  lite3VMPrintf(sq
28e60 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
28e70 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69  r*, va_list);.#i
28e80 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
28e90 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
28ea0 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ed(SQLITE_HAVE_O
28eb0 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20  S_TRACE).  void 
28ec0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
28ed0 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  tf(const char*, 
28ee0 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ...);.#endif.#if
28ef0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28f00 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71  TEST).  void *sq
28f10 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50  lite3TestTextToP
28f20 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  tr(const char*);
28f30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
28f40 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
28f50 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  G).  void sqlite
28f60 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72  3TreeViewExpr(Tr
28f70 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
28f80 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  xpr*, u8);.  voi
28f90 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
28fa0 77 42 61 72 65 45 78 70 72 4c 69 73 74 28 54 72  wBareExprList(Tr
28fb0 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
28fc0 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
28fd0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
28fe0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
28ff0 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a  prList(TreeView*
29000 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  , const ExprList
29010 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  *, u8, const cha
29020 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
29030 74 65 33 54 72 65 65 56 69 65 77 53 72 63 4c 69  te3TreeViewSrcLi
29040 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
29050 6e 73 74 20 53 72 63 4c 69 73 74 2a 29 3b 0a 20  nst SrcList*);. 
29060 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
29070 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
29080 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
29090 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  ect*, u8);.  voi
290a0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
290b0 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c  wWith(TreeView*,
290c0 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38   const With*, u8
290d0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
290e0 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
290f0 43 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  C.  void sqlite3
29100 54 72 65 65 56 69 65 77 57 69 6e 64 6f 77 28 54  TreeViewWindow(T
29110 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
29120 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 20 20  Window*, u8);.  
29130 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
29140 56 69 65 77 57 69 6e 46 75 6e 63 28 54 72 65 65  ViewWinFunc(Tree
29150 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e  View*, const Win
29160 64 6f 77 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  dow*, u8);.#endi
29170 66 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20  f.#endif...void 
29180 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
29190 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65  (char **, sqlite
291a0 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  3*, const char*)
291b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
291c0 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63  rorMsg(Parse*, c
291d0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
291e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
291f0 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f  quote(char*);.vo
29200 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  id sqlite3Dequot
29210 65 45 78 70 72 28 45 78 70 72 2a 29 3b 0a 76 6f  eExpr(Expr*);.vo
29220 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49  id sqlite3TokenI
29230 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a  nit(Token*,char*
29240 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  );.int sqlite3Ke
29250 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20  ywordCode(const 
29260 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
29270 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
29280 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
29290 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
292a0 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  char **);.void s
292b0 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69  qlite3FinishCodi
292c0 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  ng(Parse*);.int 
292d0 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65  sqlite3GetTempRe
292e0 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  g(Parse*);.void 
292f0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
29300 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74  mpReg(Parse*,int
29310 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
29320 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  tTempRange(Parse
29330 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
29340 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
29350 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
29360 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29370 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61  e3ClearTempRegCa
29380 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  che(Parse*);.#if
29390 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
293a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65  .int sqlite3NoTe
293b0 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65  mpsInRange(Parse
293c0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64  *,int,int);.#end
293d0 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  if.Expr *sqlite3
293e0 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
293f0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
29400 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
29410 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
29420 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
29430 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
29440 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
29450 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
29460 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
29470 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
29480 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
29490 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  t, Expr*, Expr*)
294a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 45  ;.void sqlite3PE
294b0 78 70 72 41 64 64 53 65 6c 65 63 74 28 50 61 72  xprAddSelect(Par
294c0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65  se*, Expr*, Sele
294d0 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ct*);.Expr *sqli
294e0 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74  te3ExprAnd(sqlit
294f0 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  e3*,Expr*, Expr*
29500 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
29510 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
29520 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
29530 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
29540 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73  d sqlite3ExprAss
29550 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72  ignVarNumber(Par
29560 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32 29  se*, Expr*, u32)
29570 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29580 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
29590 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
295a0 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
295b0 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
295c0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
295d0 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
295e0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
295f0 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a  endVector(Parse*
29600 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73  ,ExprList*,IdLis
29610 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
29620 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
29630 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72  etSortOrder(Expr
29640 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  List*,int);.void
29650 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
29660 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45  SetName(Parse*,E
29670 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c  xprList*,Token*,
29680 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29690 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61  e3ExprListSetSpa
296a0 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
296b0 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t*,const char*,c
296c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
296d0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
296e0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
296f0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33  , ExprList*);.u3
29700 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  2 sqlite3ExprLis
29710 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70  tFlags(const Exp
29720 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
29730 69 74 65 33 49 6e 64 65 78 48 61 73 44 75 70 6c  ite3IndexHasDupl
29740 69 63 61 74 65 52 6f 6f 74 50 61 67 65 28 49 6e  icateRootPage(In
29750 64 65 78 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  dex*);.int sqlit
29760 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  e3Init(sqlite3*,
29770 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71   char**);.int sq
29780 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
29790 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68  k(void*, int, ch
297a0 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  ar**, char**);.i
297b0 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e  nt sqlite3InitOn
297c0 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
297d0 20 63 68 61 72 2a 2a 2c 20 75 33 32 29 3b 0a 76   char**, u32);.v
297e0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
297f0 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  a(Parse*,Token*,
29800 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
29810 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
29820 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
29830 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c  ABLE.Module *sql
29840 69 74 65 33 50 72 61 67 6d 61 56 74 61 62 52 65  ite3PragmaVtabRe
29850 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c  gister(sqlite3*,
29860 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
29870 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  e);.#endif.void 
29880 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
29890 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
298a0 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  on(sqlite3*);.vo
298b0 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f  id sqlite3ResetO
298c0 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  neSchema(sqlite3
298d0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
298e0 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61  ite3CollapseData
298f0 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65  baseArray(sqlite
29900 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
29910 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
29920 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
29930 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
29940 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  leteColumnNames(
29950 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29  sqlite3*,Table*)
29960 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c  ;.int sqlite3Col
29970 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74  umnsFromExprList
29980 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
29990 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29  *,i16*,Column**)
299a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
299b0 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70  lectAddColumnTyp
299c0 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61  eAndCollation(Pa
299d0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65  rse*,Table*,Sele
299e0 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
299f0 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53  ite3ResultSetOfS
29a00 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c  elect(Parse*,Sel
29a10 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ect*);.void sqli
29a20 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62  te3OpenMasterTab
29a30 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29  le(Parse *, int)
29a40 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
29a50 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
29a60 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c  Table*);.i16 sql
29a70 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65  ite3ColumnOfInde
29a80 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a  x(Index*, i16);.
29a90 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72  void sqlite3Star
29aa0 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  tTable(Parse*,To
29ab0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
29ac0 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69  int,int,int);.#i
29ad0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
29ae0 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20  HIDDEN_COLUMNS. 
29af0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c   void sqlite3Col
29b00 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
29b10 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f  mName(Table*, Co
29b20 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  lumn*);.#else.# 
29b30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
29b40 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72  lumnPropertiesFr
29b50 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e  omName(T,C) /* n
29b60 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76  o-op */.#endif.v
29b70 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
29b80 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65  lumn(Parse*,Toke
29b90 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  n*,Token*);.void
29ba0 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75   sqlite3AddNotNu
29bb0 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ll(Parse*, int);
29bc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
29bd0 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65  PrimaryKey(Parse
29be0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
29bf0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
29c00 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65  id sqlite3AddChe
29c10 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ckConstraint(Par
29c20 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
29c30 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61  d sqlite3AddDefa
29c40 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  ultValue(Parse*,
29c50 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
29c60 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
29c70 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
29c80 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65  ollateType(Parse
29c90 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
29ca0 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65   sqlite3EndTable
29cb0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
29cc0 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a  oken*,u8,Select*
29cd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61  );.int sqlite3Pa
29ce0 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61  rseUri(const cha
29cf0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  r*,const char*,u
29d00 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20  nsigned int*,.  
29d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c    sqlite3_vfs**,
29d30 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b  char**,char **);
29d40 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
29d50 41 53 5f 43 4f 44 45 43 0a 20 20 69 6e 74 20 73  AS_CODEC.  int s
29d60 71 6c 69 74 65 33 43 6f 64 65 63 51 75 65 72 79  qlite3CodecQuery
29d70 50 61 72 61 6d 65 74 65 72 73 28 73 71 6c 69 74  Parameters(sqlit
29d80 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
29d90 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
29da0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
29db0 69 74 65 33 43 6f 64 65 63 51 75 65 72 79 50 61  ite3CodecQueryPa
29dc0 72 61 6d 65 74 65 72 73 28 41 2c 42 2c 43 29 20  rameters(A,B,C) 
29dd0 30 0a 23 65 6e 64 69 66 0a 42 74 72 65 65 20 2a  0.#endif.Btree *
29de0 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
29df0 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
29e00 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66  nst char*);..#if
29e10 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
29e20 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73  TABLE.# define s
29e30 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58  qlite3FaultSim(X
29e40 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73  ) SQLITE_OK.#els
29e50 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  e.  int sqlite3F
29e60 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65  aultSim(int);.#e
29e70 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71  ndif..Bitvec *sq
29e80 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74  lite3BitvecCreat
29e90 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  e(u32);.int sqli
29ea0 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69  te3BitvecTest(Bi
29eb0 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
29ec0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
29ed0 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63  stNotNull(Bitvec
29ee0 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
29ef0 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69  ite3BitvecSet(Bi
29f00 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  tvec*, u32);.voi
29f10 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43  d sqlite3BitvecC
29f20 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33  lear(Bitvec*, u3
29f30 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  2, void*);.void 
29f40 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73  sqlite3BitvecDes
29f50 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75  troy(Bitvec*);.u
29f60 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  32 sqlite3Bitvec
29f70 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23  Size(Bitvec*);.#
29f80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
29f90 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c  TESTABLE.int sql
29fa0 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
29fb0 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b  nTest(int,int*);
29fc0 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20  .#endif..RowSet 
29fd0 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e  *sqlite3RowSetIn
29fe0 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
29ff0 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
2a000 44 65 6c 65 74 65 28 76 6f 69 64 2a 29 3b 0a 76  Delete(void*);.v
2a010 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
2a020 74 43 6c 65 61 72 28 76 6f 69 64 2a 29 3b 0a 76  tClear(void*);.v
2a030 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
2a040 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c  tInsert(RowSet*,
2a050 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
2a060 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77  e3RowSetTest(Row
2a070 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68  Set*, int iBatch
2a080 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
2a090 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f  te3RowSetNext(Ro
2a0a0 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76  wSet*, i64*);..v
2a0b0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
2a0c0 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b  eView(Parse*,Tok
2a0d0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
2a0e0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65  *,ExprList*,Sele
2a0f0 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23  ct*,int,int);..#
2a100 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2a110 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c  TE_OMIT_VIEW) ||
2a120 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2a130 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2a140 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  LE).  int sqlite
2a150 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
2a160 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  mes(Parse*,Table
2a170 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2a180 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  ne sqlite3ViewGe
2a190 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42  tColumnNames(A,B
2a1a0 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ) 0.#endif..#if 
2a1b0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
2a1c0 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c  HED>30.  int sql
2a1d0 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
2a1e0 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64  o(yDbMask);.#end
2a1f0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
2a200 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
2a210 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
2a220 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a230 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28  e3CodeDropTable(
2a240 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2a250 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2a260 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62  sqlite3DeleteTab
2a270 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
2a280 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2a290 65 33 46 72 65 65 49 6e 64 65 78 28 73 71 6c 69  e3FreeIndex(sqli
2a2a0 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23  te3*, Index*);.#
2a2b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2a2c0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
2a2d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
2a2e0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
2a2f0 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
2a300 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2a310 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
2a320 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
2a330 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2a340 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
2a350 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
2a360 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2a370 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
2a380 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2a390 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65  ite3Insert(Parse
2a3a0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c  *, SrcList*, Sel
2a3b0 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69  ect*, IdList*, i
2a3c0 6e 74 2c 20 55 70 73 65 72 74 2a 29 3b 0a 76 6f  nt, Upsert*);.vo
2a3d0 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79  id *sqlite3Array
2a3e0 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33  Allocate(sqlite3
2a3f0 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a  *,void*,int,int*
2a400 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a  ,int*);.IdList *
2a410 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70  sqlite3IdListApp
2a420 65 6e 64 28 50 61 72 73 65 2a 2c 20 49 64 4c 69  end(Parse*, IdLi
2a430 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
2a440 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49  t sqlite3IdListI
2a450 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e  ndex(IdList*,con
2a460 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69  st char*);.SrcLi
2a470 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2a480 73 74 45 6e 6c 61 72 67 65 28 50 61 72 73 65 2a  stEnlarge(Parse*
2a490 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
2a4a0 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a   int);.SrcList *
2a4b0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
2a4c0 70 65 6e 64 28 50 61 72 73 65 2a 2c 20 53 72 63  pend(Parse*, Src
2a4d0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
2a4e0 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
2a4f0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
2a500 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
2a510 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2a520 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
2a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a550 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
2a560 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
2a570 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
2a580 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
2a590 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
2a5a0 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
2a5b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a5c0 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50  rcListFuncArgs(P
2a5d0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2a5e0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
2a5f0 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
2a600 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
2a610 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
2a620 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
2a630 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
2a640 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
2a650 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2a660 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
2a670 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
2a680 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
2a690 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
2a6a0 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
2a6b0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
2a6c0 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
2a6d0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
2a6e0 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
2a6f0 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78  te3AllocateIndex
2a700 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c  Object(sqlite3*,
2a710 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b  i16,int,char**);
2a720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
2a730 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
2a740 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
2a750 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
2a760 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
2a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a780 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
2a790 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
2a7a0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
2a7b0 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
2a7c0 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
2a7d0 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
2a7e0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
2a7f0 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65  lectDest*);.Sele
2a800 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
2a810 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72  tNew(Parse*,Expr
2a820 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  List*,SrcList*,E
2a830 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a  xpr*,ExprList*,.
2a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a850 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45           Expr*,E
2a860 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70  xprList*,u32,Exp
2a870 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2a880 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
2a890 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
2a8a0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
2a8b0 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
2a8c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
2a8d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
2a8e0 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
2a8f0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
2a900 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
2a910 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
2a920 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
2a930 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
2a940 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2a950 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
2a960 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
2a970 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2a980 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
2a990 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
2a9a0 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c  here(Parse*,SrcL
2a9b0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
2a9c0 69 73 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a  ist*,Expr*,char*
2a9d0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2a9e0 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d  qlite3DeleteFrom
2a9f0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2aa00 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69  *, Expr*, ExprLi
2aa10 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  st*, Expr*);.voi
2aa20 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  d sqlite3Update(
2aa30 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2aa40 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  , ExprList*,Expr
2aa50 2a 2c 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a 2c  *,int,ExprList*,
2aa60 45 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  Expr*,.         
2aa70 20 20 20 20 20 20 20 20 20 20 55 70 73 65 72 74            Upsert
2aa80 2a 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73  *);.WhereInfo *s
2aa90 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
2aaa0 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
2aab0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
2aac0 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69  ,ExprList*,u16,i
2aad0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2aae0 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
2aaf0 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  nfo*);.LogEst sq
2ab00 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74  lite3WhereOutput
2ab10 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e  RowCount(WhereIn
2ab20 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2ab30 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
2ab40 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2ab50 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
2ab60 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66  Ordered(WhereInf
2ab70 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2ab80 57 68 65 72 65 4f 72 64 65 72 42 79 4c 69 6d 69  WhereOrderByLimi
2ab90 74 4f 70 74 4c 61 62 65 6c 28 57 68 65 72 65 49  tOptLabel(WhereI
2aba0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
2abb0 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
2abc0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2abd0 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e   sqlite3WhereCon
2abe0 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65  tinueLabel(Where
2abf0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
2ac00 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62  te3WhereBreakLab
2ac10 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
2ac20 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
2ac30 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49  OkOnePass(WhereI
2ac40 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65  nfo*, int*);.#de
2ac50 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46  fine ONEPASS_OFF
2ac60 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 2f        0        /
2ac70 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53  * Use of ONEPASS
2ac80 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a   not allowed */.
2ac90 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
2aca0 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20  SINGLE   1      
2acb0 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c    /* ONEPASS val
2acc0 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  id for a single 
2acd0 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64  row update */.#d
2ace0 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55  efine ONEPASS_MU
2acf0 4c 54 49 20 20 20 20 32 20 20 20 20 20 20 20 20  LTI    2        
2ad00 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61  /* ONEPASS is va
2ad10 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65  lid for multiple
2ad20 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71   rows */.void sq
2ad30 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61  lite3ExprCodeLoa
2ad40 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72  dIndexColumn(Par
2ad50 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
2ad60 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
2ad70 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2ad80 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
2ad90 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
2ada0 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
2adb0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2adc0 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
2add0 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  le(Vdbe*, Table*
2ade0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
2adf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2ae00 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65  prCodeMove(Parse
2ae10 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2ae20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2ae30 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20  xprCode(Parse*, 
2ae40 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
2ae50 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
2ae60 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78  eCopy(Parse*, Ex
2ae70 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
2ae80 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
2ae90 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
2aea0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2aeb0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2aec0 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
2aed0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2aee0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
2aef0 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78  eTemp(Parse*, Ex
2af00 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
2af10 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
2af20 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78  arget(Parse*, Ex
2af30 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
2af40 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
2af50 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20  ndCache(Parse*, 
2af60 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2af70 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2af80 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
2af90 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2afa0 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69   int, u8);.#defi
2afb0 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44  ne SQLITE_ECEL_D
2afc0 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  UP      0x01  /*
2afd0 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c   Deep, not shall
2afe0 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65  ow copies */.#de
2aff0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
2b000 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20  _FACTOR   0x02  
2b010 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f  /* Factor out co
2b020 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a  nstant terms */.
2b030 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2b040 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30  CEL_REF      0x0
2b050 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69  4  /* Use ExprLi
2b060 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43  st.u.x.iOrderByC
2b070 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ol */.#define SQ
2b080 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45  LITE_ECEL_OMITRE
2b090 46 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74  F  0x08  /* Omit
2b0a0 20 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78   if ExprList.u.x
2b0b0 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a  .iOrderByCol */.
2b0c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2b0d0 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
2b0e0 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
2b0f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2b100 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
2b110 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
2b120 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2b130 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61  xprIfFalseDup(Pa
2b140 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2b150 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
2b160 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
2b170 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2b180 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2b190 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41  *);.#define LOCA
2b1a0 54 45 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a  TE_VIEW    0x01.
2b1b0 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e  #define LOCATE_N
2b1c0 4f 45 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c  OERR   0x02.Tabl
2b1d0 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
2b1e0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32  Table(Parse*,u32
2b1f0 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61   flags,const cha
2b200 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2b210 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
2b220 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28  LocateTableItem(
2b230 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73  Parse*,u32 flags
2b240 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f  ,struct SrcList_
2b250 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a  item *);.Index *
2b260 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
2b270 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
2b280 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2b290 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2b2a0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2b2b0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69  Table(sqlite3*,i
2b2c0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2b2d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
2b2e0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
2b2f0 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  x(sqlite3*,int,c
2b300 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2b310 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28  d sqlite3Vacuum(
2b320 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  Parse*,Token*,Ex
2b330 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2b340 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
2b350 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  *, sqlite3*, int
2b360 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
2b370 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
2b380 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
2b390 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
2b3a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2b3b0 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45  Compare(Parse*,E
2b3c0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
2b3d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b3e0 70 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78  prCompareSkip(Ex
2b3f0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
2b400 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b410 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
2b420 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
2b430 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2b440 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45  ite3ExprImpliesE
2b450 78 70 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  xpr(Parse*,Expr*
2b460 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
2b470 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d  nt sqlite3ExprIm
2b480 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28  pliesNonNullRow(
2b490 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  Expr*,int);.void
2b4a0 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
2b4b0 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61  yzeAggregates(Na
2b4c0 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
2b4d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b4e0 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69  ExprAnalyzeAggLi
2b4f0 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  st(NameContext*,
2b500 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2b510 73 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72  sqlite3ExprCover
2b520 65 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c  edByIndex(Expr*,
2b530 20 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78   int iCur, Index
2b540 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c   *pIdx);.int sql
2b550 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73  ite3FunctionUses
2b560 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53  ThisSrc(Expr*, S
2b570 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a  rcList*);.Vdbe *
2b580 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50  sqlite3GetVdbe(P
2b590 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  arse*);.#ifndef 
2b5a0 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2b5b0 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  E.void sqlite3Pr
2b5c0 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64  ngSaveState(void
2b5d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2b5e0 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28  rngRestoreState(
2b5f0 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  void);.#endif.vo
2b600 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
2b610 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69  ckAll(sqlite3*,i
2b620 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b630 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
2b640 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
2b650 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
2b660 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d  VerifyNamedSchem
2b670 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  a(Parse*, const 
2b680 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64  char *zDb);.void
2b690 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
2b6a0 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
2b6b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2b6c0 74 65 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f  te3EndTransactio
2b6d0 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  n(Parse*,int);.v
2b6e0 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
2b6f0 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
2b700 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2b710 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
2b720 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
2b730 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
2b740 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
2b750 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
2b760 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b770 70 72 49 64 54 6f 54 72 75 65 46 61 6c 73 65 28  prIdToTrueFalse(
2b780 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2b790 74 65 33 45 78 70 72 54 72 75 74 68 56 61 6c 75  te3ExprTruthValu
2b7a0 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  e(const Expr*);.
2b7b0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2b7c0 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29  sConstant(Expr*)
2b7d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b7e0 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f  rIsConstantNotJo
2b7f0 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  in(Expr*);.int s
2b800 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
2b810 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45  tantOrFunction(E
2b820 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  xpr*, u8);.int s
2b830 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
2b840 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61  tantOrGroupBy(Pa
2b850 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
2b860 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2b870 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
2b880 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
2b890 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
2b8a0 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
2b8b0 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65  HINTS.int sqlite
2b8c0 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62  3ExprContainsSub
2b8d0 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65  query(Expr*);.#e
2b8e0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2b8f0 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
2b900 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
2b910 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
2b920 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
2b930 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b940 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
2b950 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
2b960 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
2b970 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
2b980 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2b990 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
2b9a0 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20  eRowDelete(.    
2b9b0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
2b9c0 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
2b9d0 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c  nt,i16,u8,u8,u8,
2b9e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b9f0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
2ba00 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
2ba10 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2ba20 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69  t, int*, int);.i
2ba30 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
2ba40 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
2ba50 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
2ba60 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
2ba70 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
2ba80 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
2ba90 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
2baa0 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
2bab0 69 74 65 33 45 78 70 72 52 65 66 65 72 65 6e 63  ite3ExprReferenc
2bac0 65 73 55 70 64 61 74 65 64 43 6f 6c 75 6d 6e 28  esUpdatedColumn(
2bad0 45 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e 74 29 3b  Expr*,int*,int);
2bae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
2baf0 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
2bb00 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
2bb10 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  le*,int*,int,int
2bb20 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
2bb50 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  8,u8,int,int*,in
2bb60 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 23 69 66  t*,Upsert*);.#if
2bb70 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2bb80 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f  E_NULL_TRIM.  vo
2bb90 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b  id sqlite3SetMak
2bba0 65 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c  eRecordP5(Vdbe*,
2bbb0 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
2bbc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
2bbd0 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41  etMakeRecordP5(A
2bbe0 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ,B).#endif.void 
2bbf0 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
2bc00 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
2bc10 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Table*,int,int,i
2bc20 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  nt,int*,int,int,
2bc30 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2bc40 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64  3OpenTableAndInd
2bc50 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ices(Parse*, Tab
2bc60 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e  le*, int, u8, in
2bc70 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e  t, u8*, int*, in
2bc80 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2bc90 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
2bca0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
2bcb0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2bcc0 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50  ite3MultiWrite(P
2bcd0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2bce0 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72  ite3MayAbort(Par
2bcf0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
2bd00 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74  e3HaltConstraint
2bd10 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
2bd20 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38  t, char*, i8, u8
2bd30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
2bd40 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28  niqueConstraint(
2bd50 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64  Parse*, int, Ind
2bd60 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
2bd70 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e  e3RowidConstrain
2bd80 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
2bd90 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  able*);.Expr *sq
2bda0 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
2bdb0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
2bdc0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
2bdd0 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
2bde0 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
2bdf0 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
2be00 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
2be10 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
2be20 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
2be30 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
2be40 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
2be50 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
2be60 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
2be70 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
2be80 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a  ,int);.FuncDef *
2be90 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 53  sqlite3FunctionS
2bea0 65 61 72 63 68 28 69 6e 74 2c 63 6f 6e 73 74 20  earch(int,const 
2beb0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2bec0 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69  ite3InsertBuilti
2bed0 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c  nFuncs(FuncDef*,
2bee0 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  int);.FuncDef *s
2bef0 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
2bf00 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
2bf10 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75  t char*,int,u8,u
2bf20 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2bf30 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
2bf40 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2bf50 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
2bf60 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
2bf70 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2bf80 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2bf90 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75  rPerConnectionBu
2bfa0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73  iltinFunctions(s
2bfb0 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2bfc0 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
2bfd0 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
2bfe0 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
2bff0 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
2c000 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2c010 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
2c020 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
2c030 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2c040 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
2c050 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2c060 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2c070 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
2c080 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
2c090 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
2c0a0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  *, ExprList*,Exp
2c0b0 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
2c0c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c0d0 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
2c0e0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2c0f0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
2c100 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
2c110 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
2c120 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
2c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c140 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
2c150 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2c160 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
2c170 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
2c180 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
2c190 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
2c1a0 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
2c1b0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
2c1c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2c1d0 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
2c1e0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
2c1f0 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
2c200 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
2c210 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
2c220 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
2c230 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
2c240 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
2c250 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
2c260 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
2c270 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2c280 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
2c290 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
2c2a0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
2c2b0 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
2c2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2d0 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
2c2e0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
2c2f0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
2c300 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
2c310 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
2c320 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
2c330 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
2c340 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
2c350 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
2c360 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2c370 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
2c380 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2c390 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
2c3a0 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
2c3b0 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
2c3c0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
2c3d0 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
2c3e0 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20  ite3*,Select*,. 
2c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c410 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2c420 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2c430 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2c440 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
2c450 73 65 72 74 53 74 65 70 28 50 61 72 73 65 2a 2c  sertStep(Parse*,
2c460 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
2c470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c490 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a           Select*
2c4a0 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20  ,u8,Upsert*,.   
2c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4d0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2c4e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2c4f0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
2c500 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61  lite3TriggerUpda
2c510 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f  teStep(Parse*,To
2c520 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
2c530 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20  Expr*, u8,.     
2c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c560 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63     const char*,c
2c570 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54  onst char*);.  T
2c580 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
2c590 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65  te3TriggerDelete
2c5a0 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65  Step(Parse*,Toke
2c5b0 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20 20  n*, Expr*,.     
2c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5e0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63     const char*,c
2c5f0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
2c600 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2c610 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
2c620 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
2c630 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
2c640 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
2c650 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
2c660 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2c670 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
2c680 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
2c690 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
2c6a0 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
2c6b0 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
2c6c0 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
2c6d0 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
2c6e0 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
2c6f0 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
2c700 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2c710 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
2c720 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d  ((p)->pToplevel=
2c730 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
2c740 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
2c750 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
2c760 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
2c770 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
2c780 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
2c790 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
2c7a0 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
2c7b0 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
2c7c0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
2c7d0 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
2c7e0 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
2c7f0 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
2c800 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
2c810 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
2c820 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
2c830 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
2c840 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
2c850 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
2c860 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
2c870 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
2c880 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
2c890 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
2c8a0 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  p) 1.# define sq
2c8b0 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
2c8c0 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
2c8d0 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
2c8e0 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
2c8f0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2c900 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2c910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
2c920 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
2c930 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2c940 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
2c950 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
2c960 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
2c970 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
2c980 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
2c990 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
2c9a0 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
2c9b0 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
2c9c0 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
2c9d0 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
2c9e0 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
2c9f0 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
2ca00 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2ca10 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2ca20 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
2ca30 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2ca40 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
2ca50 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
2ca60 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
2ca70 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
2ca80 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
2ca90 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
2caa0 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
2cab0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2cac0 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
2cad0 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
2cae0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2caf0 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
2cb00 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2cb10 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
2cb20 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
2cb30 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
2cb40 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
2cb50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
2cb60 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
2cb70 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
2cb80 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
2cb90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
2cba0 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
2cbb0 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
2cbc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2cbd0 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
2cbe0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2cbf0 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
2cc00 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
2cc10 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2cc20 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
2cc30 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
2cc40 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
2cc50 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2cc60 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
2cc70 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
2cc80 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
2cc90 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
2cca0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2ccb0 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
2ccc0 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
2ccd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2cce0 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
2ccf0 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
2cd00 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
2cd10 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
2cd20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
2cd30 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2cd40 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
2cd50 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
2cd60 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
2cd70 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69  const char*);.#i
2cd80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2cd90 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69  T_UTF16.int sqli
2cda0 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
2cdb0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
2cdc0 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23  a, int nChar);.#
2cdd0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2cde0 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
2cdf0 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
2ce00 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
2ce10 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
2ce20 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67  const u8**);.Log
2ce30 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
2ce40 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73  t(u64);.LogEst s
2ce50 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28  qlite3LogEstAdd(
2ce60 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a  LogEst,LogEst);.
2ce70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ce80 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2ce90 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
2cea0 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28  ogEstFromDouble(
2ceb0 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a  double);.#endif.
2cec0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2ced0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
2cee0 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a  CANSTATUS) || \.
2cef0 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
2cf00 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
2cf10 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20  OR_STAT4) || \. 
2cf20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
2cf30 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41  E_EXPLAIN_ESTIMA
2cf40 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71  TED_ROWS).u64 sq
2cf50 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
2cf60 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66  (LogEst);.#endif
2cf70 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56  .VList *sqlite3V
2cf80 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a  ListAdd(sqlite3*
2cf90 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  ,VList*,const ch
2cfa0 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f  ar*,int,int);.co
2cfb0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2cfc0 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
2cfd0 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74  VList*,int);.int
2cfe0 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d   sqlite3VListNam
2cff0 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f  eToNum(VList*,co
2d000 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2d010 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
2d020 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
2d030 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
2d040 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
2d050 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
2d060 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
2d070 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
2d080 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
2d090 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
2d0a0 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
2d0b0 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
2d0c0 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
2d0d0 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
2d0e0 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
2d0f0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2d100 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
2d110 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2d120 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
2d130 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
2d140 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
2d150 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
2d160 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
2d170 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
2d180 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
2d190 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
2d1a0 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
2d1b0 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
2d1c0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
2d1d0 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
2d1e0 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
2d1f0 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
2d200 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
2d210 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
2d220 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
2d230 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2d240 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
2d250 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
2d260 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
2d270 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
2d280 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
2d290 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
2d2a0 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
2d2b0 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
2d2c0 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
2d2d0 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
2d2e0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
2d2f0 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
2d300 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
2d310 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
2d320 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
2d330 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
2d340 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
2d350 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
2d360 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74  ffinityStr(sqlit
2d370 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  e3*, Index*);.vo
2d380 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
2d390 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
2d3a0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
2d3b0 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
2d3c0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
2d3d0 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
2d3e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
2d3f0 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
2d400 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
2d410 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
2d420 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43  ar sqlite3TableC
2d430 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61  olumnAffinity(Ta
2d440 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20  ble*,int);.char 
2d450 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
2d460 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
2d470 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2d480 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
2d490 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
2d4a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
2d4b0 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
2d4c0 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
2d4d0 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  id sqlite3ErrorW
2d4e0 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c  ithMsg(sqlite3*,
2d4f0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2d500 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  *,...);.void sql
2d510 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
2d520 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2d530 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72  lite3SystemError
2d540 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2d550 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78  void *sqlite3Hex
2d560 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c  ToBlob(sqlite3*,
2d570 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
2d580 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74  int n);.u8 sqlit
2d590 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  e3HexToInt(int h
2d5a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77  );.int sqlite3Tw
2d5b0 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20  oPartName(Parse 
2d5c0 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2d5d0 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a  n *, Token **);.
2d5e0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2d5f0 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
2d600 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  E).const char *s
2d610 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
2d620 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  t);.#endif..#ifd
2d630 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2d640 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74  _DESERIALIZE.int
2d650 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69   sqlite3MemdbIni
2d660 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  t(void);.#endif.
2d670 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2d680 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
2d690 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
2d6a0 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
2d6b0 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
2d6c0 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
2d6d0 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
2d6e0 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
2d6f0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2d700 33 49 73 42 69 6e 61 72 79 28 63 6f 6e 73 74 20  3IsBinary(const 
2d710 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53  CollSeq*);.CollS
2d720 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  eq *sqlite3Locat
2d730 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
2d740 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
2d750 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53  ar*zName);.CollS
2d760 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43  eq *sqlite3ExprC
2d770 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2d780 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70  arse, Expr *pExp
2d790 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  r);.CollSeq *sql
2d7a0 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65  ite3ExprNNCollSe
2d7b0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
2d7c0 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69   Expr *pExpr);.i
2d7d0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2d7e0 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72 73 65  llSeqMatch(Parse
2d7f0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
2d800 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2d810 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e  rAddCollateToken
2d820 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2d830 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
2d840 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20  en*, int);.Expr 
2d850 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
2d860 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72  ollateString(Par
2d870 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
2d880 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  char*);.Expr *sq
2d890 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c  lite3ExprSkipCol
2d8a0 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  late(Expr*);.int
2d8b0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
2d8c0 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
2d8d0 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
2d8e0 6c 69 74 65 33 57 72 69 74 61 62 6c 65 53 63 68  lite3WritableSch
2d8f0 65 6d 61 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ema(sqlite3*);.i
2d900 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
2d910 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
2d920 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2d930 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
2d940 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
2d950 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
2d960 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
2d970 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2d980 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
2d990 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2d9a0 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
2d9b0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2d9c0 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
2d9d0 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
2d9e0 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
2d9f0 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
2da00 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
2da10 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
2da20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2da30 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
2da40 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
2da50 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
2da60 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
2da70 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  z,u8);..const vo
2da80 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
2da90 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
2daa0 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
2dab0 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
2dac0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2dad0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2dae0 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
2daf0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
2db00 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
2db10 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
2db20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
2db30 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
2db40 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2db50 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c  Null(sqlite3_val
2db60 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ue*);.void sqlit
2db70 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
2db80 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c  te3_value*);.sql
2db90 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
2dba0 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
2dbb0 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20  te3 *);.#ifndef 
2dbc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
2dbd0 36 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  6.char *sqlite3U
2dbe0 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
2dbf0 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
2dc00 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66  int, u8);.#endif
2dc10 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
2dc20 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65  eFromExpr(sqlite
2dc30 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c  3 *, Expr *, u8,
2dc40 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
2dc50 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ue **);.void sql
2dc60 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
2dc70 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76  finity(sqlite3_v
2dc80 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b  alue *, u8, u8);
2dc90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2dca0 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74  AMALGAMATION.ext
2dcb0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2dcc0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f  ed char sqlite3O
2dcd0 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b  pcodeProperty[];
2dce0 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68  .extern const ch
2dcf0 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e  ar sqlite3StrBIN
2dd00 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  ARY[];.extern co
2dd10 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2dd20 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f  r sqlite3UpperTo
2dd30 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20  Lower[];.extern 
2dd40 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2dd50 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65  har sqlite3Ctype
2dd60 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  Map[];.extern co
2dd70 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65  nst Token sqlite
2dd80 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78  3IntTokens[];.ex
2dd90 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
2dda0 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
2ddb0 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
2ddc0 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44  ig;.extern FuncD
2ddd0 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42 75  efHash sqlite3Bu
2dde0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a  iltinFunctions;.
2ddf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2de00 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
2de10 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
2de20 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
2de30 6e 64 69 66 0a 23 69 66 64 65 66 20 56 44 42 45  ndif.#ifdef VDBE
2de40 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20  _PROFILE.extern 
2de50 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 73  sqlite3_uint64 s
2de60 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e  qlite3NProfileCn
2de70 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  t;.#endif.void s
2de80 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
2de90 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ved(sqlite3*, in
2dea0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
2deb0 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65  id sqlite3Reinde
2dec0 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  x(Parse*, Token*
2ded0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2dee0 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63  sqlite3AlterFunc
2def0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2df00 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65  d sqlite3AlterRe
2df10 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a  nameTable(Parse*
2df20 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2df30 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2df40 33 41 6c 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75  3AlterRenameColu
2df50 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  mn(Parse*, SrcLi
2df60 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
2df70 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2df80 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
2df90 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2dfa0 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
2dfb0 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
2dfc0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2dfd0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
2dfe0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
2dff0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
2e000 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
2e010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
2e020 65 52 68 73 4f 66 49 4e 28 50 61 72 73 65 2a 2c  eRhsOfIN(Parse*,
2e030 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2e040 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
2e050 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  select(Parse*, E
2e060 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2e070 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61  te3SelectPrep(Pa
2e080 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
2e090 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
2e0a0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2e0b0 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72  WrongNumTermsErr
2e0c0 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  or(Parse *pParse
2e0d0 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e  , Select *p);.in
2e0e0 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70  t sqlite3MatchSp
2e0f0 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61  anName(const cha
2e100 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
2e110 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2e120 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
2e130 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
2e140 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  prNames(NameCont
2e150 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ext*, Expr*);.in
2e160 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2e170 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61  ExprListNames(Na
2e180 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
2e190 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
2e1a0 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63  ite3ResolveSelec
2e1b0 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53  tNames(Parse*, S
2e1c0 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
2e1d0 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
2e1e0 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66  e3ResolveSelfRef
2e1f0 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61  erence(Parse*,Ta
2e200 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45  ble*,int,Expr*,E
2e210 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2e220 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64  qlite3ResolveOrd
2e230 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a  erGroupBy(Parse*
2e240 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c  , Select*, ExprL
2e250 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
2e260 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e270 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64  ColumnDefault(Vd
2e280 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  be *, Table *, i
2e290 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2e2a0 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73  qlite3AlterFinis
2e2b0 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  hAddColumn(Parse
2e2c0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
2e2d0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42  id sqlite3AlterB
2e2e0 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61  eginAddColumn(Pa
2e2f0 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
2e300 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
2e310 52 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70 28 50  RenameTokenMap(P
2e320 61 72 73 65 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f  arse*, void*, To
2e330 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2e340 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 52 65  te3RenameTokenRe
2e350 6d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64  map(Parse*, void
2e360 20 2a 70 54 6f 2c 20 76 6f 69 64 20 2a 70 46 72   *pTo, void *pFr
2e370 6f 6d 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  om);.void sqlite
2e380 33 52 65 6e 61 6d 65 45 78 70 72 55 6e 6d 61 70  3RenameExprUnmap
2e390 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
2e3a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e  .void sqlite3Ren
2e3b0 61 6d 65 45 78 70 72 6c 69 73 74 55 6e 6d 61 70  ameExprlistUnmap
2e3c0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2e3d0 74 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  t*);.CollSeq *sq
2e3e0 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
2e3f0 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
2e400 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
2e410 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
2e420 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
2e430 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75 6d  nst char*, Colum
2e440 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2e450 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
2e460 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2e470 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
2e480 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
2e490 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71 6c  usyHandler*, sql
2e4a0 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74  ite3_file*);.int
2e4b0 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
2e4c0 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
2e4d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
2e4e0 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
2e4f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2e500 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
2e510 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
2e520 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
2e530 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
2e540 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
2e550 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
2e560 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
2e570 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
2e580 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2e590 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
2e5a0 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
2e5b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2e5c0 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
2e5d0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
2e5e0 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
2e5f0 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
2e600 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
2e610 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
2e620 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
2e630 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
2e640 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
2e650 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
2e660 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
2e670 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2e680 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
2e690 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
2e6a0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
2e6b0 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
2e6c0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2e6d0 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
2e6e0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2e6f0 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
2e700 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
2e710 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2e720 74 65 33 4b 65 79 49 6e 66 6f 46 72 6f 6d 45 78  te3KeyInfoFromEx
2e730 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
2e740 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
2e750 6e 74 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  nt);..#ifdef SQL
2e760 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
2e770 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72  lite3KeyInfoIsWr
2e780 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a  iteable(KeyInfo*
2e790 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2e7a0 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
2e7b0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2e7c0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
2e7d0 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69  t, void *,.  voi
2e7e0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2e7f0 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2e800 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
2e810 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2e820 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2e830 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2e840 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c   .  void (*)(sql
2e850 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
2e860 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2e870 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
2e880 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2e890 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2e8a0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2e8b0 20 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74   .  FuncDestruct
2e8c0 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
2e8d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
2e8e0 6f 6f 70 44 65 73 74 72 75 63 74 6f 72 28 76 6f  oopDestructor(vo
2e8f0 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
2e900 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74  e3OomFault(sqlit
2e910 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
2e920 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74  e3OomClear(sqlit
2e930 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
2e940 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33  3ApiExit(sqlite3
2e950 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   *db, int);.int 
2e960 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
2e970 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29  atabase(Parse *)
2e980 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ;..void sqlite3S
2e990 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41  trAccumInit(StrA
2e9a0 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ccum*, sqlite3*,
2e9b0 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   char*, int, int
2e9c0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
2e9d0 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
2e9e0 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
2e9f0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73  sqlite3SelectDes
2ea00 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74  tInit(SelectDest
2ea10 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72  *,int,int);.Expr
2ea20 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43   *sqlite3CreateC
2ea30 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65  olumnExpr(sqlite
2ea40 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  3 *, SrcList *, 
2ea50 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64  int, int);..void
2ea60 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65   sqlite3BackupRe
2ea70 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61  start(sqlite3_ba
2ea80 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ckup *);.void sq
2ea90 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74  lite3BackupUpdat
2eaa0 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  e(sqlite3_backup
2eab0 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20   *, Pgno, const 
2eac0 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  u8 *);..#ifndef 
2ead0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
2eae0 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33  UERY.int sqlite3
2eaf0 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73  ExprCheckIN(Pars
2eb00 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73  e*, Expr*);.#els
2eb10 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2eb20 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c  e3ExprCheckIN(x,
2eb30 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e  y) SQLITE_OK.#en
2eb40 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2eb50 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
2eb60 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71  OR_STAT4.void sq
2eb70 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63  lite3AnalyzeFunc
2eb80 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
2eb90 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
2eba0 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20 20  beSetValue(.    
2ebb0 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
2ebc0 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
2ebd0 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  xpr*,int,int,int
2ebe0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2ebf0 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70  tat4ValueFromExp
2ec00 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
2ec10 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
2ec20 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ue**);.void sqli
2ec30 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65  te3Stat4ProbeFre
2ec40 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  e(UnpackedRecord
2ec50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2ec60 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74  tat4Column(sqlit
2ec70 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  e3*, const void*
2ec80 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69  , int, int, sqli
2ec90 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68  te3_value**);.ch
2eca0 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78 43  ar sqlite3IndexC
2ecb0 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 71  olumnAffinity(sq
2ecc0 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20  lite3*, Index*, 
2ecd0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  int);.#endif../*
2ece0 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
2ecf0 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
2ed00 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
2ed10 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2ed20 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20  E_AMALGAMATION. 
2ed30 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61   void *sqlite3Pa
2ed40 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28  rserAlloc(void*(
2ed50 2a 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a 29  *)(u64), Parse*)
2ed60 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2ed70 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
2ed80 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
2ed90 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2eda0 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
2edb0 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b  d*, int, Token);
2edc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
2edd0 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74 29 3b  erFallback(int);
2ede0 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
2edf0 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
2ee00 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
2ee10 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
2ee20 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
2ee30 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
2ee40 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
2ee50 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2ee60 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
2ee70 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
2ee80 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
2ee90 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2eea0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2eeb0 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2eec0 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
2eed0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2eee0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
2eef0 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
2ef00 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
2ef10 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
2ef20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2ef30 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2ef40 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
2ef50 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
2ef60 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2ef70 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
2ef80 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
2ef90 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
2efa0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2efb0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2efc0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
2efd0 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
2efe0 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
2eff0 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
2f000 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
2f010 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2f020 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
2f030 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2f040 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
2f050 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2f060 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
2f070 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2f080 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65  tabLock(X).#  de
2f090 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2f0a0 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  Unlock(X).#  def
2f0b0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
2f0c0 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20  nlockList(X).#  
2f0d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2f0e0 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59  abSavepoint(X, Y
2f0f0 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  , Z) SQLITE_OK.#
2f100 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2f110 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20  GetVTable(X,Y)  
2f120 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c  ((VTable*)0).#el
2f130 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
2f140 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69  e3VtabClear(sqli
2f150 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29  te3 *db, Table*)
2f160 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2f170 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28  3VtabDisconnect(
2f180 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
2f190 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73  le *p);.   int s
2f1a0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73  qlite3VtabSync(s
2f1b0 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65  qlite3 *db, Vdbe
2f1c0 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
2f1d0 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73  e3VtabRollback(s
2f1e0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2f1f0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2f200 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64  ommit(sqlite3 *d
2f210 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  b);.   void sqli
2f220 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62  te3VtabLock(VTab
2f230 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
2f240 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2f250 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
2f260 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
2f270 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65  nlockList(sqlite
2f280 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  3*);.   int sqli
2f290 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
2f2a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c  (sqlite3 *, int,
2f2b0 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73   int);.   void s
2f2c0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2f2d0 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71  Errmsg(Vdbe*, sq
2f2e0 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20  lite3_vtab*);.  
2f2f0 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33   VTable *sqlite3
2f300 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65  GetVTable(sqlite
2f310 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  3*, Table*);.   
2f320 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 56  Module *sqlite3V
2f330 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  tabCreateModule(
2f340 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a  .     sqlite3*,.
2f350 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2f360 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71 6c  ,.     const sql
2f370 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20  ite3_module*,.  
2f380 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76     void*,.     v
2f390 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20  oid(*)(void*).  
2f3a0 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71   );.#  define sq
2f3b0 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
2f3c0 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
2f3d0 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
2f3e0 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
2f3f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2f400 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e  EponymousTableIn
2f410 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65  it(Parse*,Module
2f420 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f430 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
2f440 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a  leClear(sqlite3*
2f450 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20  ,Module*);.void 
2f460 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
2f470 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
2f480 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
2f490 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
2f4a0 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
2f4b0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2f4c0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2f4d0 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
2f4e0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2f4f0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2f500 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
2f510 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
2f520 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
2f530 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
2f540 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2f550 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
2f560 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2f570 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
2f580 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2f590 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
2f5a0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
2f5b0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2f5c0 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
2f5d0 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2f5e0 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
2f5f0 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
2f600 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
2f610 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
2f620 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
2f630 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
2f640 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
2f650 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 73 71  nArg, Expr*);.sq
2f660 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
2f670 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69  te3StmtCurrentTi
2f680 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  me(sqlite3_conte
2f690 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
2f6a0 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
2f6b0 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  dex(Vdbe*, const
2f6c0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
2f6d0 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65  t sqlite3Transfe
2f6e0 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  rBindings(sqlite
2f6f0 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65  3_stmt *, sqlite
2f700 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20  3_stmt *);.void 
2f710 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73  sqlite3ParserRes
2f720 65 74 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  et(Parse*);.#ifd
2f730 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2f740 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 63 68 61 72 20  _NORMALIZE.char 
2f750 2a 73 71 6c 69 74 65 33 4e 6f 72 6d 61 6c 69 7a  *sqlite3Normaliz
2f760 65 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  e(Vdbe*, const c
2f770 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  har*);.#endif.in
2f780 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61  t sqlite3Reprepa
2f790 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20  re(Vdbe*);.void 
2f7a0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
2f7b0 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65  heckLength(Parse
2f7c0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
2f7d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c  nst char*);.Coll
2f7e0 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61  Seq *sqlite3Bina
2f7f0 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71  ryCompareCollSeq
2f800 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
2f810 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73  , Expr *);.int s
2f820 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f  qlite3TempInMemo
2f830 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  ry(const sqlite3
2f840 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  *);.const char *
2f850 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
2f860 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66  dename(int);.#if
2f870 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2f880 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74  _WAL.  int sqlit
2f890 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c  e3Checkpoint(sql
2f8a0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
2f8b0 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20   int*, int*);.  
2f8c0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65  int sqlite3WalDe
2f8d0 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c  faultHook(void*,
2f8e0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2f8f0 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69  har*,int);.#endi
2f900 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2f910 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68  _OMIT_CTE.  With
2f920 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64 64   *sqlite3WithAdd
2f930 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f  (Parse*,With*,To
2f940 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
2f950 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20  elect*);.  void 
2f960 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
2f970 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a  e(sqlite3*,With*
2f980 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2f990 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65 2a  3WithPush(Parse*
2f9a0 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65  , With*, u8);.#e
2f9b0 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  lse.#define sqli
2f9c0 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c  te3WithPush(x,y,
2f9d0 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  z).#define sqlit
2f9e0 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79  e3WithDelete(x,y
2f9f0 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ).#endif.#ifndef
2fa00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 50 53   SQLITE_OMIT_UPS
2fa10 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a 73 71  ERT.  Upsert *sq
2fa20 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28 73  lite3UpsertNew(s
2fa30 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
2fa40 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
2fa50 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64  *,Expr*);.  void
2fa60 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65   sqlite3UpsertDe
2fa70 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 55 70  lete(sqlite3*,Up
2fa80 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65 72 74  sert*);.  Upsert
2fa90 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74 44   *sqlite3UpsertD
2faa0 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70 73 65  up(sqlite3*,Upse
2fab0 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  rt*);.  int sqli
2fac0 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79 7a 65  te3UpsertAnalyze
2fad0 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 53 72  Target(Parse*,Sr
2fae0 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a 29 3b  cList*,Upsert*);
2faf0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
2fb00 70 73 65 72 74 44 6f 55 70 64 61 74 65 28 50 61  psertDoUpdate(Pa
2fb10 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54 61 62  rse*,Upsert*,Tab
2fb20 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  le*,Index*,int);
2fb30 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
2fb40 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28  qlite3UpsertNew(
2fb50 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55 70 73  v,w,x,y,z) ((Ups
2fb60 65 72 74 2a 29 30 29 0a 23 64 65 66 69 6e 65 20  ert*)0).#define 
2fb70 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65 6c  sqlite3UpsertDel
2fb80 65 74 65 28 78 2c 79 29 0a 23 64 65 66 69 6e 65  ete(x,y).#define
2fb90 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 75   sqlite3UpsertDu
2fba0 70 28 78 2c 79 29 20 20 20 20 20 20 20 28 28 55  p(x,y)       ((U
2fbb0 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64 69 66  psert*)0).#endif
2fbc0 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f  .../* Declaratio
2fbd0 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  ns for functions
2fbe0 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20   in fkey.c. All 
2fbf0 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70  of these are rep
2fc00 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f  laced by.** no-o
2fc10 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54  p macros if OMIT
2fc20 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
2fc30 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73  defined. In this
2fc40 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e   case no foreign
2fc50 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e  .** key function
2fc60 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62  ality is availab
2fc70 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47  le. If OMIT_TRIG
2fc80 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62  GER is defined b
2fc90 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49  ut.** OMIT_FOREI
2fca0 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f  GN_KEY is not, o
2fcb0 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  nly some of the 
2fcc0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f  functions are no
2fcd0 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69  -oped. In.** thi
2fce0 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b  s case foreign k
2fcf0 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20  eys are parsed, 
2fd00 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e  but no other fun
2fd10 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a  ctionality is.**
2fd20 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
2fd30 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
2fd40 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
2fd50 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
2fd60 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
2fd70 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2fd80 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2fd90 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
2fda0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
2fdb0 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
2fdc0 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
2fdd0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2fde0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2fdf0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2fe00 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  FkDropTable(Pars
2fe10 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54  e*, SrcList *, T
2fe20 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  able*);.  void s
2fe30 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
2fe40 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2fe50 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
2fe60 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e  int*, int);.  in
2fe70 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  t sqlite3FkRequi
2fe80 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  red(Parse*, Tabl
2fe90 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  e*, int*, int);.
2fea0 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f    u32 sqlite3FkO
2feb0 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54  ldmask(Parse*, T
2fec0 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a  able*);.  FKey *
2fed0 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
2fee0 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65  ces(Table *);.#e
2fef0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2ff00 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61  lite3FkActions(a
2ff10 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2ff20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43  efine sqlite3FkC
2ff30 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  heck(a,b,c,d,e,f
2ff40 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2ff50 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61  te3FkDropTable(a
2ff60 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20  ,b,c).  #define 
2ff70 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2ff80 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a  (a,b)         0.
2ff90 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2ffa0 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c  3FkRequired(a,b,
2ffb0 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65 66  c,d)    0.  #def
2ffc0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 66  ine sqlite3FkRef
2ffd0 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20 20  erences(a)      
2ffe0 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64    0.#endif.#ifnd
2fff0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
30000 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69  OREIGN_KEY.  voi
30010 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  d sqlite3FkDelet
30020 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62  e(sqlite3 *, Tab
30030 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  le*);.  int sqli
30040 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
30050 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46  (Parse*,Table*,F
30060 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74  Key*,Index**,int
30070 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  **);.#else.  #de
30080 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65  fine sqlite3FkDe
30090 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66  lete(a,b).  #def
300a0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  ine sqlite3FkLoc
300b0 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64  ateIndex(a,b,c,d
300c0 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ,e).#endif.../*.
300d0 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75  ** Available fau
300e0 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53  lt injectors.  S
300f0 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65  hould be numbere
30100 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
30110 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   0..*/.#define S
30120 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
30130 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30  TOR_MALLOC     0
30140 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
30150 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f  FAULTINJECTOR_CO
30160 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  UNT      1../*.*
30170 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
30180 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66  to the code in f
30190 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20  ault.c used for 
301a0 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e  identifying "ben
301b0 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66  ign".** malloc f
301c0 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73  ailures. This is
301d0 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66   only present if
301e0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
301f0 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  LE.** is not def
30200 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
30210 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
30220 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  LE.  void sqlite
30230 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
30240 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  oc(void);.  void
30250 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
30260 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23  nMalloc(void);.#
30270 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
30280 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
30290 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66  nMalloc().  #def
302a0 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ine sqlite3EndBe
302b0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e  nignMalloc().#en
302c0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  dif../*.** Allow
302d0 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ed return values
302e0 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e   from sqlite3Fin
302f0 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64  dInIndex().*/.#d
30300 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
30310 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20  OWID        1   
30320 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f  /* Search the ro
30330 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
30340 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
30350 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20  NDEX_EPH        
30360 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20    2   /* Search 
30370 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74  an ephemeral b-t
30380 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ree */.#define I
30390 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53  N_INDEX_INDEX_AS
303a0 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73  C    3   /* Exis
303b0 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e  ting index ASCEN
303c0 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
303d0 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44  IN_INDEX_INDEX_D
303e0 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69  ESC   4   /* Exi
303f0 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43  sting index DESC
30400 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
30410 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  e IN_INDEX_NOOP 
30420 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e          5   /* N
30430 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c  o table availabl
30440 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f  e. Use compariso
30450 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ns */./*.** Allo
30460 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68  wed flags for th
30470 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20  e 3rd parameter 
30480 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  to sqlite3FindIn
30490 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66  Index()..*/.#def
304a0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
304b0 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20  P_OK     0x0001 
304c0 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e   /* OK to return
304d0 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a   IN_INDEX_NOOP *
304e0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
304f0 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30  EX_MEMBERSHIP  0
30500 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65  x0002  /* IN ope
30510 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d  rator used for m
30520 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a  embership test *
30530 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
30540 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30  EX_LOOP        0
30550 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65  x0004  /* IN ope
30560 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20  rator used as a 
30570 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  loop */.int sqli
30580 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
30590 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
305a0 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 2c  u32, int*, int*,
305b0 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c   int*);..int sql
305c0 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  ite3JournalOpen(
305d0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63  sqlite3_vfs *, c
305e0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c  onst char *, sql
305f0 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74  ite3_file *, int
30600 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
30610 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73  te3JournalSize(s
30620 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23  qlite3_vfs *);.#
30630 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
30640 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
30650 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65 66  WRITE) \. || def
30660 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
30670 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f  LE_BATCH_ATOMIC_
30680 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71 6c  WRITE).  int sql
30690 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74  ite3JournalCreat
306a0 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  e(sqlite3_file *
306b0 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
306c0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49  qlite3JournalIsI
306d0 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f  nMemory(sqlite3_
306e0 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73  file *p);.void s
306f0 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c  qlite3MemJournal
30700 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c  Open(sqlite3_fil
30710 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
30720 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
30730 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a  AndFlags(Parse *
30740 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29  pParse, Expr *p)
30750 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ;.#if SQLITE_MAX
30760 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
30770 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
30780 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65  tExprHeight(Sele
30790 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ct *);.  int sql
307a0 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
307b0 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ght(Parse*, int)
307c0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
307d0 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  e sqlite3SelectE
307e0 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20  xprHeight(x) 0. 
307f0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30800 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
30810 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32  x,y).#endif..u32
30820 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65   sqlite3Get4byte
30830 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69  (const u8*);.voi
30840 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74  d sqlite3Put4byt
30850 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69  e(u8*, u32);..#i
30860 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
30870 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
30880 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
30890 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
308a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69  (sqlite3 *, sqli
308b0 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  te3 *);.  void s
308c0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
308d0 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  Unlocked(sqlite3
308e0 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71   *db);.  void sq
308f0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
30900 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64  losed(sqlite3 *d
30910 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  b);.#else.  #def
30920 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
30930 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79  ctionBlocked(x,y
30940 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
30950 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
30960 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69  ocked(x).  #defi
30970 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
30980 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65  tionClosed(x).#e
30990 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
309a0 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64  ITE_DEBUG.  void
309b0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
309c0 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20  ace(FILE*, char 
309d0 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  *);.#endif.#if d
309e0 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41 47  efined(YYCOVERAG
309f0 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  E).  int sqlite3
30a00 50 61 72 73 65 72 43 6f 76 65 72 61 67 65 28 46  ParserCoverage(F
30a10 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ILE*);.#endif../
30a20 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
30a30 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43  TE_ENABLE IOTRAC
30a40 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68  E exists then th
30a50 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
30a60 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72  e.** sqlite3IoTr
30a70 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
30a80 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b   to a printf-lik
30a90 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74  e routine used t
30aa0 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74  o.** print I/O t
30ab0 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e  racing messages.
30ac0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
30ad0 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
30ae0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
30af0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
30b00 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
30b10 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
30b20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
30b30 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
30b40 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20  e*);.SQLITE_API 
30b50 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f  SQLITE_EXTERN vo
30b60 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  id (SQLITE_CDECL
30b70 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65   *sqlite3IoTrace
30b80 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
30b90 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
30ba0 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
30bb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
30bc0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
30bd0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
30be0 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
30bf0 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
30c00 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
30c10 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
30c20 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
30c30 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
30c40 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
30c50 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
30c60 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
30c70 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
30c80 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
30c90 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
30ca0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30cb0 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
30cc0 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
30cd0 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
30ce0 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
30cf0 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
30d00 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
30d10 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
30d20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
30d30 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
30d40 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
30d50 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
30d60 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
30d70 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
30d80 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
30d90 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
30da0 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
30db0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
30dc0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
30dd0 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
30de0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
30df0 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
30e00 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
30e10 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
30e20 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
30e30 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
30e40 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
30e50 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
30e60 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
30e70 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
30e80 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
30e90 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
30ea0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
30eb0 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
30ec0 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
30ed0 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
30ee0 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
30ef0 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
30f00 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
30f10 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
30f20 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
30f30 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
30f40 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
30f50 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
30f60 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
30f70 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
30f80 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
30f90 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
30fa0 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
30fb0 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
30fc0 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
30fd0 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
30fe0 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
30ff0 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
31000 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
31010 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
31020 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
31030 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
31040 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
31050 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
31060 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
31070 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
31080 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
31090 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
310a0 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
310b0 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
310c0 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
310d0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
310e0 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
310f0 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
31100 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
31110 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
31120 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
31130 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
31140 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
31150 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
31160 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
31170 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
31180 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
31190 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
311a0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
311b0 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
311c0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
311d0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
311e0 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
311f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
31200 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
31210 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
31220 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
31230 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
31240 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
31250 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
31260 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
31270 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
31280 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
31290 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
312a0 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
312b0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
312c0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
312d0 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
312e0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
312f0 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
31300 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
31310 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30  E_PCACHE     0x0
31320 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65  4  /* Page cache
31330 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
31340 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67  ./*.** Threading
31350 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69   interface.*/.#i
31360 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
31370 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e  KER_THREADS>0.in
31380 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43  t sqlite3ThreadC
31390 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65  reate(SQLiteThre
313a0 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f  ad**,void*(*)(vo
313b0 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74  id*),void*);.int
313c0 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f   sqlite3ThreadJo
313d0 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  in(SQLiteThread*
313e0 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69  , void**);.#endi
313f0 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
31400 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 50  QLITE_ENABLE_DBP
31410 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65 66  AGE_VTAB) || def
31420 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
31430 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 70  ).int sqlite3Dbp
31440 61 67 65 52 65 67 69 73 74 65 72 28 73 71 6c 69  ageRegister(sqli
31450 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69  te3*);.#endif.#i
31460 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
31470 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56  _ENABLE_DBSTAT_V
31480 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
31490 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
314a0 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65   sqlite3DbstatRe
314b0 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
314c0 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
314d0 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72 53  lite3ExprVectorS
314e0 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72 29  ize(Expr *pExpr)
314f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
31500 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20 2a  rIsVector(Expr *
31510 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
31520 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64  lite3VectorField
31530 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20 69  Subexpr(Expr*, i
31540 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
31550 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72 46  e3ExprForVectorF
31560 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70 72  ield(Parse*,Expr
31570 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
31580 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72 4d  ite3VectorErrorM
31590 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  sg(Parse*, Expr*
315a0 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
315b0 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
315c0 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73  PTION_DIAGS.cons
315d0 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65 33  t char **sqlite3
315e0 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69  CompileOptions(i
315f0 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64  nt *pnOpt);.#end
31600 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  if..#endif /* SQ
31610 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a           LITEINT_H */.