/ Hex Artifact Content
Login

Artifact 3dda7ba0ea00f591c18405e5061d10041e0fcd5934e2542f29f8c8cffd73c242:


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 23 69 66 64 65 66 20 53  int64);.#ifdef S
cbd0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
cbe0: 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f  UPDATE_HOOK.  vo
cbf0: 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72  id *pPreUpdateAr
cc00: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  g;          /* F
cc10: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
cc20: 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62   xPreUpdateCallb
cc30: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ack */.  void (*
cc40: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
cc50: 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74  ck)(   /* Regist
cc60: 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ered using sqlit
cc70: 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f  e3_preupdate_hoo
cc80: 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a  k() */.    void*
cc90: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68  ,sqlite3*,int,ch
cca0: 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63  ar const*,char c
ccb0: 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e  onst*,sqlite3_in
ccc0: 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  t64,sqlite3_int6
ccd0: 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61  4.  );.  PreUpda
cce0: 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20  te *pPreUpdate; 
ccf0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
cd00: 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65  t for active pre
cd10: 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b  -update callback
cd20: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
cd30: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
cd40: 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69  PDATE_HOOK */.#i
cd50: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cd60: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
cd70: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
cd80: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
cd90: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
cda0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
cdb0: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
cdc0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
cdd0: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
cde0: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
cdf0: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
ce00: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
ce10: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
ce20: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
ce30: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
ce40: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
ce50: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
ce60: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
ce70: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
ce80: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
ce90: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
cea0: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73   volatile int is
ceb0: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20  Interrupted; /* 
cec0: 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f  True if sqlite3_
ced0: 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65  interrupt has be
cee0: 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20  en called */.   
cef0: 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31   double notUsed1
cf00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
cf10: 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31  Spacer */.  } u1
cf20: 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f  ;.  Lookaside lo
cf30: 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
cf40: 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d    /* Lookaside m
cf50: 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74  alloc configurat
cf60: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
cf70: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
cf80: 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  RIZATION.  sqlit
cf90: 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20  e3_xauth xAuth; 
cfa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
cfb0: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
cfc0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
cfd0: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cff0: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
d000: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
d010: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
d020: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d030: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
d040: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
d050: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
d060: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
d070: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
d080: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
d090: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
d0a0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
d0b0: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
d0c0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75   callback */.  u
d0d0: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
d0e0: 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  sOps;        /* 
d0f0: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
d100: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
d110: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
d120: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
d130: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
d140: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
d150: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d160: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
d170: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
d180: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
d190: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d1a0: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
d1b0: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
d1c0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
d1d0: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
d1e0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
d1f0: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
d200: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
d210: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
d220: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
d230: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
d240: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
d250: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
d260: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
d270: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
d280: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e         /* Discon
d290: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
d2a0: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
d2b0: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
d2c0: 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20   Hash aFunc;    
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d2e0: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
d2f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
d300: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
d310: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
d320: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
d330: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d340: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
d350: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
d360: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
d370: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
d380: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
d390: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
d3a0: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
d3b0: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
d3c0: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
d3d0: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
d3e0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
d3f0: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
d400: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
d410: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
d420: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
d430: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
d440: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
d450: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
d460: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d470: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
d480: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
d490: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
d4a0: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
d4b0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d4c0: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
d4d0: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
d4e0: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
d4f0: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
d500: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
d510: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
d520: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
d530: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
d540: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
d550: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d560: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
d570: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d580: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
d590: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
d5a0: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
d5b0: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
d5c0: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
d5d0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
d5e0: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
d5f0: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
d600: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
d610: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
d620: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
d630: 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  STER.  ** mutex,
d640: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
d650: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
d660: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
d670: 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20  notify.c..  **. 
d680: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
d690: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
d6a0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
d6b0: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
d6c0: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
d6d0: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
d6e0: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
d6f0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
d700: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
d710: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d720: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
d730: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
d740: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
d750: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
d760: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
d770: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
d780: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
d790: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
d7a0: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
d7b0: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
d7c0: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
d7d0: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
d7e0: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
d7f0: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
d800: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
d810: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
d820: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
d830: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
d840: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
d850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
d860: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
d870: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
d880: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
d890: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
d8a0: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
d8b0: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
d8c0: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
d8d0: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
d8e0: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
d8f0: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
d900: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
d910: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
d920: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
d930: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
d940: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
d950: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
d960: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
d970: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
d980: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
d990: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
d9a0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
d9b0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
d9c0: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
d9d0: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
d9e0: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
d9f0: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
da00: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
da10: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
da20: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
da30: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
da40: 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  gs..**.** Value 
da50: 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
da60: 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
da70: 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c  ()):.**      SQL
da80: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
da90: 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46    == PAGER_FULLF
daa0: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
dab0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
dac0: 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f  c == PAGER_CKPT_
dad0: 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20  FULLFSYNC.**    
dae0: 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70    SQLITE_CacheSp
daf0: 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f  ill    == PAGER_
db00: 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23  CACHE_SPILL.*/.#
db10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
db20: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
db30: 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74  0000001  /* OK t
db40: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
db50: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
db60: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
db70: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30 30  ileFmt  0x000000
db80: 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  02  /* Create ne
db90: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
dba0: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
dbb0: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
dbc0: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
dbd0: 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  004  /* Show ful
dbe0: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
dbf0: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
dc00: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
dc10: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30  Sync      0x0000
dc20: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
dc30: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
dc40: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
dc50: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
dc60: 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30  lFSync  0x000000
dc70: 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  10  /* Use full 
dc80: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
dc90: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
dca0: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
dcb0: 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32 30  l     0x00000020
dcc0: 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c    /* OK to spill
dcd0: 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a   pager cache */.
dce0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
dcf0: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
dd00: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
dd10: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
dd20: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
dd30: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
dd40: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
dd50: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
dd60: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
dd70: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dda0: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
ddb0: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
ddc0: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddf0: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
de00: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
de10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
de20: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
de30: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
de40: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
de50: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
de60: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
de90: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
dea0: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
deb0: 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43  e SQLITE_IgnoreC
dec0: 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30 32  hecks   0x000002
ded0: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e  00  /* Do not en
dee0: 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73  force check cons
def0: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
df00: 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  ne SQLITE_ReadUn
df10: 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30  commit   0x00000
df20: 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43  400  /* READ UNC
df30: 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72  OMMITTED in shar
df40: 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  ed-cache */.#def
df50: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70  ine SQLITE_NoCkp
df60: 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30  tOnClose  0x0000
df70: 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63  0800  /* No chec
df80: 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28  kpoint on close(
df90: 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66  )/DETACH */.#def
dfa0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
dfb0: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 30  seOrder   0x0000
dfc0: 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  1000  /* Reverse
dfd0: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
dfe0: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
dff0: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
e000: 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20      0x00002000  
e010: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
e020: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
e030: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e040: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
e050: 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66  00004000  /* Enf
e060: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
e070: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
e080: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e090: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
e0a0: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e  x00008000  /* En
e0b0: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
e0c0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
e0d0: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
e0e0: 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30  ension  0x000100
e0f0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
e100: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
e110: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
e120: 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30 78  oadExtFunc    0x
e130: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61  00020000  /* Ena
e140: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
e150: 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f  on() SQL func */
e160: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e170: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
e180: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72  x00040000  /* Tr
e190: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
e1a0: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
e1b0: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
e1c0: 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30 30         0x0008000
e1d0: 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20  0  /* Defer all 
e1e0: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  FK constraints *
e1f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e200: 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20  _QueryOnly      
e210: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44  0x00100000  /* D
e220: 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  isable database 
e230: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e240: 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69  ne SQLITE_CellSi
e250: 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30 30  zeCk     0x00200
e260: 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74  000  /* Check bt
e270: 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f  ree cell sizes o
e280: 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e  n load */.#defin
e290: 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b  e SQLITE_Fts3Tok
e2a0: 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30 30  enizer  0x004000
e2b0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74  00  /* Enable ft
e2c0: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20  s3_tokenizer(2) 
e2d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e2e0: 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20  E_EnableQPSG    
e2f0: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
e300: 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74  Query Planner St
e310: 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65  ability Guarante
e320: 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  e*/.#define SQLI
e330: 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20 20  TE_TriggerEQP   
e340: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
e350: 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45 58   Show trigger EX
e360: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e370: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e380: 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73 65  TE_ResetDatabase
e390: 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a    0x02000000  /*
e3a0: 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61 62   Reset the datab
e3b0: 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ase */.#define S
e3c0: 51 4c 49 54 45 5f 4c 65 67 61 63 79 41 6c 74 65  QLITE_LegacyAlte
e3d0: 72 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20  r    0x04000000 
e3e0: 20 2f 2a 20 4c 65 67 61 63 79 20 41 4c 54 45 52   /* Legacy ALTER
e3f0: 20 54 41 42 4c 45 20 62 65 68 61 76 69 6f 75 72   TABLE behaviour
e400: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e410: 54 45 5f 4e 6f 53 63 68 65 6d 61 45 72 72 6f 72  TE_NoSchemaError
e420: 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a    0x08000000  /*
e430: 20 44 6f 20 6e 6f 74 20 72 65 70 6f 72 74 20 73   Do not report s
e440: 63 68 65 6d 61 20 70 61 72 73 65 20 65 72 72 6f  chema parse erro
e450: 72 73 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  rs*/.#define SQL
e460: 49 54 45 5f 44 65 66 65 6e 73 69 76 65 20 20 20  ITE_Defensive   
e470: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
e480: 2a 20 49 6e 70 75 74 20 53 51 4c 20 69 73 20 6c  * Input SQL is l
e490: 69 6b 65 6c 79 20 68 6f 73 74 69 6c 65 20 2a 2f  ikely hostile */
e4a0: 0a 0a 2f 2a 20 46 6c 61 67 73 20 75 73 65 64 20  ../* Flags used 
e4b0: 6f 6e 6c 79 20 69 66 20 64 65 62 75 67 67 69 6e  only if debuggin
e4c0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 49 28  g */.#define HI(
e4d0: 58 29 20 20 28 28 75 36 34 29 28 58 29 3c 3c 33  X)  ((u64)(X)<<3
e4e0: 32 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  2).#ifdef SQLITE
e4f0: 5f 44 45 42 55 47 0a 23 64 65 66 69 6e 65 20 53  _DEBUG.#define S
e500: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
e510: 20 20 20 20 20 48 49 28 30 78 30 30 30 31 29 20       HI(0x0001) 
e520: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
e530: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
e540: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e550: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
e560: 20 20 20 20 48 49 28 30 78 30 30 30 32 29 20 20      HI(0x0002)  
e570: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
e580: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 73 20  s of VDBE progs 
e590: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e5a0: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
e5b0: 20 48 49 28 30 78 30 30 30 34 29 20 20 2f 2a 20   HI(0x0004)  /* 
e5c0: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
e5d0: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
e5e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
e5f0: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 48 49  dbeAddopTrace HI
e600: 28 30 78 30 30 30 38 29 20 20 2f 2a 20 54 72 61  (0x0008)  /* Tra
e610: 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  ce sqlite3VdbeAd
e620: 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  dOp() calls */.#
e630: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
e640: 62 65 45 51 50 20 20 20 20 20 20 20 20 48 49 28  beEQP        HI(
e650: 30 78 30 30 31 30 29 20 20 2f 2a 20 44 65 62 75  0x0010)  /* Debu
e660: 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  g EXPLAIN QUERY 
e670: 50 4c 41 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  PLAN */.#endif..
e680: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
e690: 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33  lues for sqlite3
e6a0: 2e 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65  .mDbFlags.*/.#de
e6b0: 66 69 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65  fine DBFLAG_Sche
e6c0: 6d 61 43 68 61 6e 67 65 20 20 20 30 78 30 30 30  maChange   0x000
e6d0: 31 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65  1  /* Uncommitte
e6e0: 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61  d Hash table cha
e6f0: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
e700: 44 42 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69  DBFLAG_PreferBui
e710: 6c 74 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a  ltin  0x0002  /*
e720: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
e730: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
e740: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
e750: 56 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30  Vacuum         0
e760: 78 30 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e  x0004  /* Curren
e770: 74 6c 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20  tly in a VACUUM 
e780: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
e790: 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20  G_SchemaKnownOk 
e7a0: 20 30 78 30 30 30 38 20 20 2f 2a 20 53 63 68 65   0x0008  /* Sche
e7b0: 6d 61 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 62  ma is known to b
e7c0: 65 20 76 61 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  e valid */../*.*
e7d0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
e7e0: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
e7f0: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
e800: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
e810: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
e820: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
e830: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
e840: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
e850: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
e860: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
e870: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
e880: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
e890: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
e8a0: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
e8b0: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
e8c0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e8e0: 20 30 78 30 30 30 32 20 20 20 61 76 61 69 6c 61   0x0002   availa
e8f0: 62 6c 65 20 66 6f 72 20 72 65 75 73 65 20 2a 2f  ble for reuse */
e900: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e910: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
e920: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
e930: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
e940: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
e950: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
e960: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
e970: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
e980: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
e990: 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70  QLITE_DistinctOp
e9a0: 74 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2a  t    0x0010   /*
e9b0: 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20   DISTINCT using 
e9c0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
e9d0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49  ne SQLITE_CoverI
e9e0: 64 78 53 63 61 6e 20 20 20 30 78 30 30 32 30 20  dxScan   0x0020 
e9f0: 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e    /* Covering in
ea00: 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65  dex scans */.#de
ea10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65  fine SQLITE_Orde
ea20: 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 34  rByIdxJoin 0x004
ea30: 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  0   /* ORDER BY 
ea40: 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64  of joins via ind
ea50: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ex */.#define SQ
ea60: 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20  LITE_Transitive 
ea70: 20 20 20 20 30 78 30 30 38 30 20 20 20 2f 2a 20      0x0080   /* 
ea80: 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74  Transitive const
ea90: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
eaa0: 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f  e SQLITE_OmitNoo
eab0: 70 4a 6f 69 6e 20 20 20 30 78 30 31 30 30 20 20  pJoin   0x0100  
eac0: 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20   /* Omit unused 
ead0: 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20  tables in joins 
eae0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eaf0: 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77 20 20 20  E_CountOfView   
eb00: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 68 65   0x0200   /* The
eb10: 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f   count-of-view o
eb20: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
eb30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75  define SQLITE_Cu
eb40: 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 30  rsorHints    0x0
eb50: 34 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f  400   /* Add OP_
eb60: 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64  CursorHint opcod
eb70: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
eb80: 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20 20 20  LITE_Stat34     
eb90: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
eba0: 55 73 65 20 53 54 41 54 33 20 6f 72 20 53 54 41  Use STAT3 or STA
ebb0: 54 34 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a  T4 data */.   /*
ebc0: 20 54 48 33 20 65 78 70 65 63 74 73 20 74 68 65   TH3 expects the
ebd0: 20 53 74 61 74 33 34 20 20 5e 5e 5e 5e 5e 5e 20   Stat34  ^^^^^^ 
ebe0: 76 61 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38  value to be 0x08
ebf0: 30 30 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67  00.  Don't chang
ec00: 65 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  e it */.#define 
ec10: 53 51 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20  SQLITE_PushDown 
ec20: 20 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f        0x1000   /
ec30: 2a 20 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20  * The push-down 
ec40: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
ec50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ec60: 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78  implifyJoin   0x
ec70: 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72  2000   /* Conver
ec80: 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a  t LEFT JOIN to J
ec90: 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  OIN */.#define S
eca0: 51 4c 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20  QLITE_SkipScan  
ecb0: 20 20 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a       0x4000   /*
ecc0: 20 53 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23   Skip-scans */.#
ecd0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72  define SQLITE_Pr
ece0: 6f 70 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38  opagateConst 0x8
ecf0: 30 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e  000   /* The con
ed00: 73 74 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f  stant propagatio
ed10: 6e 20 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65  n opt */.#define
ed20: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
ed30: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
ed40: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
ed50: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
ed60: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
ed70: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
ed80: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
ed90: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
eda0: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69  sabled..*/.#defi
edb0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
edc0: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
edd0: 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74  )  (((db)->dbOpt
ede0: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30  Flags&(mask))!=0
edf0: 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  ).#define Optimi
ee00: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
ee10: 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29  , mask)   (((db)
ee20: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
ee30: 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  sk))==0)../*.** 
ee40: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
ee50: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
ee60: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
ee70: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
ee80: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
ee90: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
eea0: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
eeb0: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
eec0: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
eed0: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
eee0: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
eef0: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
ef00: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
ef10: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
ef20: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
ef30: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
ef40: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
ef50: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
ef60: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
ef70: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
ef80: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
ef90: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
efa0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
efb0: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
efc0: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
efd0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
efe0: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
eff0: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
f000: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
f010: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
f020: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
f030: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
f040: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
f050: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
f060: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
f070: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f080: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
f090: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
f0a0: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
f0b0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
f0c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f0d0: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
f0e0: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
f0f0: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
f100: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
f110: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f120: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
f130: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
f140: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
f150: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
f160: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
f170: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
f180: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
f190: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
f1a0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  ** structure.  F
f1b0: 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  or global built-
f1c0: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78  in functions (ex
f1d0: 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28  : substr(), max(
f1e0: 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61  ), count()).** a
f1f0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
f200: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
f210: 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ld in the sqlite
f220: 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
f230: 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72  s object..** For
f240: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
f250: 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
f260: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61  ned functions, a
f270: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
f280: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73  .** structure is
f290: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d   held in the db-
f2a0: 3e 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c  >aHash hash tabl
f2b0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70  e..**.** The u.p
f2c0: 48 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73  Hash field is us
f2d0: 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c  ed by the global
f2e0: 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65   built-ins.  The
f2f0: 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a   u.pDestructor.*
f300: 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  * field is used 
f310: 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  by per-connectio
f320: 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69  n app-def functi
f330: 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ons..*/.struct F
f340: 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41  uncDef {.  i8 nA
f350: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
f360: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
f370: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
f380: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
f390: 20 75 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20   u32 funcFlags; 
f3a0: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
f3b0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
f3c0: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
f3d0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
f3e0: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
f3f0: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
f400: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
f410: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
f420: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
f430: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
f440: 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65  (*xSFunc)(sqlite
f450: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
f460: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
f470: 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d   /* func or agg-
f480: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
f490: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
f4a0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4c0: 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72  /* Agg finalizer
f4d0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61   */.  void (*xVa
f4e0: 6c 75 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  lue)(sqlite3_con
f4f0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
f500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
f510: 75 72 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65  urrent agg value
f520: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e   */.  void (*xIn
f530: 76 65 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63  verse)(sqlite3_c
f540: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
f550: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
f560: 20 69 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65   inverse agg-ste
f570: 70 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  p */.  const cha
f580: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53  r *zName;   /* S
f590: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
f5a0: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e  unction. */.  un
f5b0: 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65  ion {.    FuncDe
f5c0: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
f5d0: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
f5e0: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
f5f0: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
f600: 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75  /.    FuncDestru
f610: 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
f620: 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63  r;   /* Referenc
f630: 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75  e counted destru
f640: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
f650: 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  .  } u;.};../*.*
f660: 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
f670: 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20   encapsulates a 
f680: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
f690: 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63  structor callbac
f6a0: 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  k (as.** configu
f6b0: 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65  red using create
f6c0: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20  _function_v2()) 
f6d0: 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20  and a reference 
f6e0: 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a  counter. When.**
f6f0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
f700: 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20  _v2() is called 
f710: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
f720: 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74  tion with a dest
f730: 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e  ructor,.** a sin
f740: 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68  gle object of th
f750: 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63  is type is alloc
f760: 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75  ated. FuncDestru
f770: 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74  ctor.nRef is set
f780: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
f790: 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a  r of FuncDef obj
f7a0: 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69  ects created (ei
f7b0: 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70  ther 1 or 3, dep
f7c0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
f7d0: 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20  r.** or not the 
f7e0: 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69  specified encodi
f7f0: 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59  ng is SQLITE_ANY
f800: 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70  ). The FuncDef.p
f810: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65  Destructor.** me
f820: 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20  mber of each of 
f830: 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20  the new FuncDef 
f840: 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74  objects is set t
f850: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61  o point to the a
f860: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63  llocated.** Func
f870: 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a  Destructor..**.*
f880: 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68  * Thereafter, wh
f890: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  en one of the Fu
f8a0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
f8b0: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65   deleted, the re
f8c0: 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74  ference.** count
f8d0: 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   on this object 
f8e0: 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  is decremented. 
f8f0: 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20  When it reaches 
f900: 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  0, the destructo
f910: 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20  r.** is invoked 
f920: 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74  and the FuncDest
f930: 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65  ructor structure
f940: 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63   freed..*/.struc
f950: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
f960: 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20   {.  int nRef;. 
f970: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
f980: 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69  )(void *);.  voi
f990: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b  d *pUserData;.};
f9a0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
f9b0: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
f9c0: 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65  Def.flags.  Note
f9d0: 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54   that the _LENGT
f9e0: 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a  H and _TYPEOF.**
f9f0: 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72   values must cor
fa00: 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41  respond to OPFLA
fa10: 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
fa20: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
fa30: 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45  .  And.** SQLITE
fa40: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d  _FUNC_CONSTANT m
fa50: 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
fa60: 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  as SQLITE_DETERM
fa70: 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a  INISTIC.  There.
fa80: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
fa90: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
faa0: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
fab0: 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c   this..**.** Val
fac0: 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
fad0: 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
fae0: 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53  ert()):.**     S
faf0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
fb00: 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d  X    ==  NC_MinM
fb10: 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46  axAgg      == SF
fb20: 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20  _MinMaxAgg.**   
fb30: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45    SQLITE_FUNC_LE
fb40: 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c  NGTH    ==  OPFL
fb50: 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20  AG_LENGTHARG.** 
fb60: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
fb70: 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50  TYPEOF    ==  OP
fb80: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a  FLAG_TYPEOFARG.*
fb90: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
fba0: 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20  C_CONSTANT  ==  
fbb0: 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49  SQLITE_DETERMINI
fbc0: 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50  STIC from the AP
fbd0: 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  I.**     SQLITE_
fbe0: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64  FUNC_ENCMASK   d
fbf0: 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45  epends on SQLITE
fc00: 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20  _UTF* macros in 
fc10: 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69  the API.*/.#defi
fc20: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
fc30: 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f  NCMASK  0x0003 /
fc40: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
fc50: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
fc60: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
fc70: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fc80: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20  LIKE     0x0004 
fc90: 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72  /* Candidate for
fca0: 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69   the LIKE optimi
fcb0: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
fcc0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41  e SQLITE_FUNC_CA
fcd0: 53 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a  SE     0x0008 /*
fce0: 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20   Case-sensitive 
fcf0: 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69  LIKE-type functi
fd00: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
fd10: 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20  LITE_FUNC_EPHEM 
fd20: 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68     0x0010 /* Eph
fd30: 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20  emeral.  Delete 
fd40: 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65  with VDBE */.#de
fd50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fd60: 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30  _NEEDCOLL 0x0020
fd70: 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
fd80: 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
fd90: 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64  t be called*/.#d
fda0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fdb0: 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34  C_LENGTH   0x004
fdc0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
fdd0: 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
fde0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fdf0: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
fe00: 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0080 /* Built-
fe10: 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
fe20: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
fe30: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
fe40: 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42  T    0x0100 /* B
fe50: 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
fe60: 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
fe70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fe80: 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30  C_COALESCE 0x020
fe90: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
fea0: 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
feb0: 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ll() */.#define 
fec0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49  SQLITE_FUNC_UNLI
fed0: 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42  KELY 0x0400 /* B
fee0: 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79  uilt-in unlikely
fef0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
ff00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ff10: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38  NC_CONSTANT 0x08
ff20: 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69  00 /* Constant i
ff30: 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e  nputs give a con
ff40: 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a  stant output */.
ff50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ff60: 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31  UNC_MINMAX   0x1
ff70: 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  000 /* True for 
ff80: 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20  min() and max() 
ff90: 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64  aggregates */.#d
ffa0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ffb0: 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30  C_SLOCHNG  0x200
ffc0: 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67  0 /* "Slow Chang
ffd0: 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61  e". Value consta
ffe0: 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20  nt during a.    
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20  ** single query 
10020 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f  - might change o
10030 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66  ver time */.#def
10040 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10050 41 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20  AFFINITY 0x4000 
10060 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69  /* Built-in affi
10070 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  nity() function 
10080 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
10090 45 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20  E_FUNC_OFFSET   
100a0 30 78 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x8000 /* Built-
100b0 69 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  in sqlite_offset
100c0 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
100d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
100e0 4e 43 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30  NC_WINDOW   0x00
100f0 30 31 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  010000 /* Built-
10100 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66  in window-only f
10110 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
10120 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57  ne SQLITE_FUNC_W
10130 49 4e 44 4f 57 5f 53 49 5a 45 20 30 78 32 30 30  INDOW_SIZE 0x200
10140 30 30 20 2f 2a 20 52 65 71 75 69 72 65 73 20 70  00 /* Requires p
10150 61 72 74 69 74 69 6f 6e 20 73 69 7a 65 20 61 73  artition size as
10160 20 61 72 67 2e 20 2a 2f 0a 23 64 65 66 69 6e 65   arg. */.#define
10170 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e 54   SQLITE_FUNC_INT
10180 45 52 4e 41 4c 20 30 78 30 30 30 34 30 30 30 30  ERNAL 0x00040000
10190 20 2f 2a 20 46 6f 72 20 75 73 65 20 62 79 20 4e   /* For use by N
101a0 65 73 74 65 64 50 61 72 73 65 28 29 20 6f 6e 6c  estedParse() onl
101b0 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  y */../*.** The 
101c0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
101d0 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e  macros, FUNCTION
101e0 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61  (), LIKEFUNC() a
101f0 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61  nd AGGREGATE() a
10200 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72  re.** used to cr
10210 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c  eate the initial
10220 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75  izers for the Fu
10230 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73  ncDef structures
10240 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49  ..**.**   FUNCTI
10250 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10260 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10270 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
10280 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
10290 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
102a0 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
102b0 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
102c0 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43  implemented by C
102d0 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20   function xFunc 
102e0 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
102f0 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65  g arguments. The
10300 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61  .**     value pa
10310 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20  ssed as iArg is 
10320 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a  cast to a (void*
10330 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c  ) and made avail
10340 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74  able.**     as t
10350 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  he user-data (sq
10360 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
10370 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  )) for the funct
10380 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61  ion. If.**     a
10390 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74  rgument bNC is t
103a0 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51  rue, then the SQ
103b0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
103c0 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a  LL flag is set..
103d0 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f  **.**   VFUNCTIO
103e0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
103f0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10400 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e  .**     Like FUN
10410 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20  CTION except it 
10420 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45  omits the SQLITE
10430 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
10440 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55  lag..**.**   DFU
10450 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10460 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10470 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
10480 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
10490 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
104a0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
104b0 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20  ANT flag and.** 
104c0 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c      adds the SQL
104d0 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
104e0 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72   flag.  Used for
104f0 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e   date & time fun
10500 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e  ctions.**     an
10510 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65  d functions like
10520 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28   sqlite_version(
10530 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67  ) that can chang
10540 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e  e, but not durin
10550 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c  g.**     a singl
10560 65 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 41  e query.  The iA
10570 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20  rg is ignored.  
10580 54 68 65 20 75 73 65 72 2d 64 61 74 61 20 69 73  The user-data is
10590 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20   always set.**  
105a0 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69     to a NULL poi
105b0 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
105c0 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
105d0 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55  used..**.**   PU
105e0 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  RE_DATE(zName, n
105f0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10600 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
10610 65 64 20 66 6f 72 20 22 70 75 72 65 22 20 64 61  ed for "pure" da
10620 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  te/time function
10630 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73  s, this macro is
10640 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a   like DFUNCTION.
10650 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20 74 68  **     except th
10660 61 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 74  at it does set t
10670 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
10680 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20  ONSTANT flags.  
10690 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69  iArg is.**     i
106a0 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75  gnored and the u
106b0 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65  ser-data for the
106c0 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20  se functions is 
106d0 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20  set to an .**   
106e0 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d    arbitrary non-
106f0 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
10700 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
10710 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
10720 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
10730 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10740 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
10750 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
10760 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
10770 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
10780 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
10790 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
107a0 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
107b0 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
107c0 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
107d0 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
107e0 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
107f0 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
10800 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
10810 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
10820 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
10830 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57  ION()..**.**   W
10840 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10850 6e 41 72 67 2c 20 69 41 72 67 2c 20 78 53 74 65  nArg, iArg, xSte
10860 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75  p, xFinal, xValu
10870 65 2c 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20  e, xInverse).** 
10880 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
10890 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
108a0 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
108b0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
108c0 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
108d0 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
108e0 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
108f0 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
10900 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
10910 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
10920 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
10930 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
10940 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
10950 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
10960 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
10970 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
10980 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
10990 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
109a0 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
109b0 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
109c0 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a  function zName.*
109d0 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70  *     that accep
109e0 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
109f0 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65  s and is impleme
10a00 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74  nted by a call t
10a10 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74  o C.**     funct
10a20 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72  ion likeFunc. Ar
10a30 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63  gument pArg is c
10a40 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a  ast to a (void *
10a50 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20  ) and made.**   
10a60 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74    available as t
10a70 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72  he function user
10a80 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
10a90 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65  ser_data()). The
10aa0 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e  .**     FuncDef.
10ab0 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69  flags variable i
10ac0 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
10ad0 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  ue passed as the
10ae0 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61   flags.**     pa
10af0 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  rameter..*/.#def
10b00 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ine FUNCTION(zNa
10b10 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10b20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10b30 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10b40 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
10b50 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10b60 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10b70 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
10b80 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10b90 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10ba0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10bb0 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43   }.#define VFUNC
10bc0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10bd0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10be0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10bf0 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10c00 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10c10 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10c20 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
10c30 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
10c40 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10c50 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46  {0} }.#define DF
10c60 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10c70 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10c80 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10c90 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
10ca0 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
10cb0 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46  8, \.   0, 0, xF
10cc0 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
10cd0 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
10ce0 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e  ine PURE_DATE(zN
10cf0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10d00 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10d10 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10d20 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
10d30 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46  TE_UTF8|SQLITE_F
10d40 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a  UNC_CONSTANT, \.
10d50 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74     (void*)&sqlit
10d60 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75  e3Config, 0, xFu
10d70 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10d80 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10d90 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61  ne FUNCTION2(zNa
10da0 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10db0 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72  bNC, xFunc, extr
10dc0 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
10dd0 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  g,SQLITE_FUNC_CO
10de0 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
10df0 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10e00 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
10e10 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51  traFlags,\.   SQ
10e20 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
10e30 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
10e40 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
10e50 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10e60 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
10e70 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
10e80 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10e90 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10ea0 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
10eb0 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
10ec0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10ed0 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  ), \.   pArg, 0,
10ee0 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
10ef0 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69   #zName, }.#defi
10f00 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
10f10 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
10f20 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
10f30 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10f40 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
10f50 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f  |flags, \.   (vo
10f60 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b  id *)arg, 0, lik
10f70 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  eFunc, 0, 0, 0, 
10f80 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10f90 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28  efine AGGREGATE(
10fa0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
10fb0 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
10fc0 6e 61 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20  nal, xValue) \. 
10fd0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
10fe0 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
10ff0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
11000 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
11010 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
11020 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c  Step,xFinal,xVal
11030 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  ue,0,#zName, {0}
11040 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
11050 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ATE2(zName, nArg
11060 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
11070 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46  , xFinal, extraF
11080 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
11090 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
110a0 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
110b0 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
110c0 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
110d0 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
110e0 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
110f0 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c  xFinal,0,#zName,
11100 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57 41   {0}}.#define WA
11110 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
11120 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
11130 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56  Step, xFinal, xV
11140 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 2c 20  alue, xInverse, 
11150 66 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  f) \.  {nArg, SQ
11160 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
11170 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
11180 4c 4c 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c 49  LL)|f, \.   SQLI
11190 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
111a0 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
111b0 6e 61 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76 65  nal,xValue,xInve
111c0 72 73 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d  rse,#zName, {0}}
111d0 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4e 41  .#define INTERNA
111e0 4c 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  L_FUNCTION(zName
111f0 2c 20 6e 41 72 67 2c 20 78 46 75 6e 63 29 20 5c  , nArg, xFunc) \
11200 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
11210 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c 53  _FUNC_INTERNAL|S
11220 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54  QLITE_UTF8|SQLIT
11230 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c  E_FUNC_CONSTANT,
11240 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e   \.   0, 0, xFun
11250 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
11260 6d 65 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a  me, {0} }.../*.*
11270 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61  * All current sa
11280 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f  vepoints are sto
11290 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
112a0 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
112b0 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76  .** sqlite3.pSav
112c0 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73  epoint. The firs
112d0 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65  t element in the
112e0 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73   list is the mos
112f0 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70  t recently.** op
11300 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  ened savepoint. 
11310 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61  Savepoints are a
11320 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74  dded to the list
11330 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20   by the vdbe.** 
11340 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
11350 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  truction..*/.str
11360 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a  uct Savepoint {.
11370 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11390 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69        /* Savepoi
113a0 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72  nt name (nul-ter
113b0 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36  minated) */.  i6
113c0 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
113f0 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61  eferred fk viola
11400 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e  tions */.  i64 n
11410 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
11420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11430 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
11440 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a  rred imm fk. */.
11450 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
11460 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  xt;             
11470 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
11480 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e  savepoint (if an
11490 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  y) */.};../*.** 
114a0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
114b0 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  e used as the se
114c0 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  cond parameter t
114d0 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  o sqlite3Savepoi
114e0 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20  nt(),.** and as 
114f0 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
11500 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f  to the OP_Savepo
11510 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
11520 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45  .*/.#define SAVE
11530 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20  POINT_BEGIN     
11540 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   0.#define SAVEP
11550 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20  OINT_RELEASE    
11560 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  1.#define SAVEPO
11570 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32  INT_ROLLBACK   2
11580 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
11590 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72  Lite module (vir
115a0 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e  tual table defin
115b0 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65  ition) is define
115c0 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
115d0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
115e0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20  wing structure, 
115f0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
11600 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a  lite3.aModule.**
11610 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a   hash table..*/.
11620 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a  struct Module {.
11630 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
11640 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
11650 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61         /* Callba
11660 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20  ck pointers */. 
11670 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
11680 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
11690 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61        /* Name pa
116a0 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
116b0 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
116c0 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
116f0 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
11700 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
11710 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
11720 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
11730 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
11740 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
11750 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b   Table *pEpoTab;
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11770 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f        /* Eponymo
11780 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69  us table for thi
11790 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s module */.};..
117a0 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
117b0 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
117c0 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
117d0 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
117e0 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
117f0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
11800 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
11810 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
11820 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
11830 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c  f this column, \
11840 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79  000, then the ty
11850 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44  pe */.  Expr *pD
11860 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61  flt;     /* Defa
11870 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ult value of thi
11880 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
11890 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
118a0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
118b0 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
118c0 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
118d0 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
118e0 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
118f0 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
11900 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
11910 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
11920 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
11930 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
11940 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
11950 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
11960 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
11970 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c  ated size of val
11980 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d  ue in this colum
11990 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d  n. sizeof(INT)==
119a0 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
119b0 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
119c0 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
119d0 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
119e0 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
119f0 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
11a00 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
11a10 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
11a20 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
11a30 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
11a40 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
11a50 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
11a60 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
11a70 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
11a80 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
11a90 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
11aa0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
11ab0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11ac0 41 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30  AG_HASTYPE  0x00
11ad0 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61  04    /* Type na
11ae0 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d  me follows colum
11af0 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e  n name */.#defin
11b00 65 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45  e COLFLAG_UNIQUE
11b10 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
11b20 43 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61  Column def conta
11b30 69 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20  ins "UNIQUE" or 
11b40 22 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  "PK" */.#define 
11b50 43 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45  COLFLAG_SORTERRE
11b60 46 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73  F 0x0010   /* Us
11b70 65 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69  e sorter-refs wi
11b80 74 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  th this column *
11b90 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c  /../*.** A "Coll
11ba0 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20  ating Sequence" 
11bb0 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
11bc0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11bd0 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
11be0 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74  ructure. Concept
11bf0 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69  ually, a collati
11c00 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73  ng sequence cons
11c10 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61  ists of a name a
11c20 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73  nd.** a comparis
11c30 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  on routine that 
11c40 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65  defines the orde
11c50 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e  r of that sequen
11c60 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c  ce..**.** If Col
11c70 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c  lSeq.xCmp is NUL
11c80 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  L, it means that
11c90 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e   the.** collatin
11ca0 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e  g sequence is un
11cb0 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65  defined.  Indice
11cc0 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e  s built on an un
11cd0 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61  defined.** colla
11ce0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61  ting sequence ma
11cf0 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  y not be read or
11d00 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72   written..*/.str
11d10 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20  uct CollSeq {.  
11d20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11d30 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
11d40 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
11d50 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65  equence, UTF-8 e
11d60 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65  ncoded */.  u8 e
11d70 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
11d80 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
11d90 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
11da0 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mp() */.  void *
11db0 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  pUser;          
11dc0 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
11dd0 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20  t to xCmp() */. 
11de0 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69   int (*xCmp)(voi
11df0 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  d*,int, const vo
11e00 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  id*, int, const 
11e10 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28  void*);.  void (
11e20 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20  *xDel)(void*);  
11e30 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
11e40 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  r pUser */.};../
11e50 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65  *.** A sort orde
11e60 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  r can be either 
11e70 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a  ASC or DESC..*/.
11e80 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
11e90 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f  O_ASC       0  /
11ea0 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
11eb0 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
11ec0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44  fine SQLITE_SO_D
11ed0 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53  ESC      1  /* S
11ee0 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
11ef0 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
11f00 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45  e SQLITE_SO_UNDE
11f10 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73  FINED -1 /* No s
11f20 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66  ort order specif
11f30 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  ied */../*.** Co
11f40 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79  lumn affinity ty
11f50 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65  pes..**.** These
11f60 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e   used to have mn
11f70 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65  emonic name like
11f80 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   'i' for SQLITE_
11f90 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a  AFF_INTEGER and.
11fa0 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54  ** 't' for SQLIT
11fb0 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74  E_AFF_TEXT.  But
11fc0 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c   we can save a l
11fd0 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20  ittle space and 
11fe0 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73  improve.** the s
11ff0 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79  peed a little by
12000 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76   numbering the v
12010 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76  alues consecutiv
12020 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72  ely..**.** But r
12030 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74  ather than start
12040 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65   with 0 or 1, we
12050 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e   begin with 'A'.
12060 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77    That way,.** w
12070 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66  hen multiple aff
12080 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20  inity types are 
12090 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74  concatenated int
120a0 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a  o a string and.*
120b0 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34  * used as the P4
120c0 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77   operand, they w
120d0 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64  ill be more read
120e0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  able..**.** Note
120f0 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e   also that the n
12100 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65  umeric types are
12110 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65   grouped togethe
12120 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e  r so that testin
12130 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72  g.** for a numer
12140 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e  ic type is a sin
12150 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  gle comparison. 
12160 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79   And the BLOB ty
12170 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a  pe is first..*/.
12180 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12190 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a  FF_BLOB     'A'.
121a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
121b0 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a  FF_TEXT     'B'.
121c0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
121d0 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a  FF_NUMERIC  'C'.
121e0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
121f0 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a  FF_INTEGER  'D'.
12200 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
12210 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a  FF_REAL     'E'.
12220 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
12230 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  IsNumericAffinit
12240 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49  y(X)  ((X)>=SQLI
12250 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a  TE_AFF_NUMERIC).
12260 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
12270 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65  E_AFF_MASK value
12280 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20  s masks off the 
12290 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73  significant bits
122a0 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69   of an.** affini
122b0 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65  ty value..*/.#de
122c0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
122d0 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f  MASK     0x47../
122e0 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20  *.** Additional 
122f0 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20  bit values that 
12300 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68  can be ORed with
12310 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74   an affinity wit
12320 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67  hout.** changing
12330 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a   the affinity..*
12340 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
12350 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20  NOTNULL flag is 
12360 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  a combination of
12370 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50   NULLEQ and JUMP
12380 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61  IFNULL..** It ca
12390 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29  uses an assert()
123a0 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68   to fire if eith
123b0 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20  er operand to a 
123c0 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70  comparison.** op
123d0 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20  erator is NULL. 
123e0 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20   It is added to 
123f0 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73  certain comparis
12400 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a  on operators to.
12410 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68  ** prove that th
12420 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61  e operands are a
12430 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a  lways NOT NULL..
12440 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12450 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30  E_KEEPNULL     0
12460 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20  x08  /* Used by 
12470 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20  vector == or <> 
12480 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12490 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30  E_JUMPIFNULL   0
124a0 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66  x10  /* jumps if
124b0 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
124c0 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  is NULL */.#defi
124d0 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  ne SQLITE_STOREP
124e0 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20  2      0x20  /* 
124f0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
12500 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74  reg[P2] rather t
12510 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66  han jump */.#def
12520 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  ine SQLITE_NULLE
12530 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a  Q       0x80  /*
12540 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64   NULL=NULL */.#d
12550 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54  efine SQLITE_NOT
12560 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20  NULL      0x90  
12570 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f  /* Assert that o
12580 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65  perands are neve
12590 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r NULL */../*.**
125a0 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68   An object of th
125b0 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74  is type is creat
125c0 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74  ed for each virt
125d0 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e  ual table presen
125e0 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61  t in.** the data
125f0 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a  base schema..**.
12600 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61  ** If the databa
12610 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  se schema is sha
12620 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  red, then there 
12630 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  is one instance 
12640 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63  of this.** struc
12650 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61  ture for each da
12660 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12670 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61  n (sqlite3*) tha
12680 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65  t uses the share
12690 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69  d.** schema. Thi
126a0 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63  s is because eac
126b0 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
126c0 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69  ction requires i
126d0 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a  ts own unique.**
126e0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
126f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
12700 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63  andle used to ac
12710 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
12720 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d   table.** implem
12730 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
12740 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
12750 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
12760 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74  d between.** dat
12770 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12780 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65  s, even when the
12790 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d   rest of the in-
127a0 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a  memory database.
127b0 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  ** schema is sha
127c0 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c  red, as the impl
127d0 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e  ementation often
127e0 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61   stores the data
127f0 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
12800 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64  on handle passed
12810 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78   to it via the x
12820 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72  Connect() or xCr
12830 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a  eate() method.**
12840 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
12850 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c  zation internall
12860 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65  y. This database
12870 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
12880 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62  le may.** then b
12890 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69  e used by the vi
128a0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
128b0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63  ementation to ac
128c0 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73  cess real tables
128d0 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64  .** within the d
128e0 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74  atabase. So that
128f0 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20   they appear as 
12900 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c  part of the call
12910 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  ers.** transacti
12920 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73  on, these access
12930 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61  es need to be ma
12940 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20  de via the same 
12950 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
12960 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75  ection as that u
12970 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53  sed to execute S
12980 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e  QL operations on
12990 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
129a0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54  le..**.** All VT
129b0 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61  able objects tha
129c0 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
129d0 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69  a single table i
129e0 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61  n a shared.** da
129f0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72  tabase schema ar
12a00 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72  e initially stor
12a10 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c  ed in a linked-l
12a20 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  ist pointed to b
12a30 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70  y.** the Table.p
12a40 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61  VTable member va
12a50 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f  riable of the co
12a60 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c  rresponding Tabl
12a70 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65  e object..** Whe
12a80 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65  n an sqlite3_pre
12a90 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e  pare() operation
12aa0 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20   is required to 
12ab0 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
12ac0 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20  al.** table, it 
12ad0 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73  searches the lis
12ae0 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65  t for the VTable
12af0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
12b00 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  s to the.** data
12b10 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12b20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72  doing the prepar
12b30 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65  ing so as to use
12b40 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20   the correct.** 
12b50 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
12b60 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70  ndle in the comp
12b70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a  iled query..**.*
12b80 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d  * When an in-mem
12b90 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ory Table object
12ba0 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72   is deleted (for
12bb0 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68   example when th
12bc0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62  e.** schema is b
12bd0 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f  eing reloaded fo
12be0 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20  r some reason), 
12bf0 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  the VTable objec
12c00 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65  ts are not.** de
12c10 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
12c20 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
12c30 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73  les are not xDis
12c40 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69  connect()ed.** i
12c50 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
12c60 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
12c70 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
12c80 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
12c90 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
12ca0 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
12cb0 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
12cc0 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
12cd0 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
12ce0 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
12cf0 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
12d00 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
12d10 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
12d20 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61  d.** next time a
12d30 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72   statement is pr
12d40 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69  epared using sai
12d50 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73  d sqlite3*. This
12d60 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61   is done.** to a
12d70 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73  void deadlock is
12d80 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  sues involving m
12d90 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e  ultiple sqlite3.
12da0 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a  mutex mutexes..*
12db0 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65  * Refer to comme
12dc0 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69  nts above functi
12dd0 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  on sqlite3VtabUn
12de0 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61  lockList() for a
12df0 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e  n.** explanation
12e00 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73   as to why it is
12e10 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20   safe to add an 
12e20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69  entry to an sqli
12e30 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a  te3.pDisconnect.
12e40 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20  ** list without 
12e50 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72  holding the corr
12e60 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
12e70 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a  3.mutex mutex..*
12e80 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20  *.** The memory 
12e90 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  for objects of t
12ea0 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61  his type is alwa
12eb0 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a  ys allocated by.
12ec0 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
12ed0 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
12ee0 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12ef0 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
12f00 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20  le.db as.** the 
12f10 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
12f20 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
12f30 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
12f40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
12f50 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
12f60 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
12f70 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
12f80 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
12f90 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
12fa0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
12fb0 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
12fc0 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
12fd0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
12fe0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
12ff0 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
13000 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13020 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
13030 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
13040 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
13050 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
13060 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
13070 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
13080 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
13090 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
130a0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
130b0 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
130c0 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
130d0 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
130e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
130f0 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
13100 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
13110 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65  ../*.** The sche
13120 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20  ma for each SQL 
13130 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69  table and view i
13140 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
13150 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e   memory.** by an
13160 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
13170 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
13180 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
13190 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
131a0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
131b0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
131c0 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
131d0 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
131e0 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
131f0 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
13200 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
13210 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
13220 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
13230 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
13240 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
13250 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
13260 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
13270 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
13280 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
13290 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
132a0 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
132b0 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
132c0 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
132d0 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
132e0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
132f0 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
13300 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
13310 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
13320 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  ch column */.  E
13330 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
13340 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
13350 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13370 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20         /*   ... 
13380 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c  also used as col
13390 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e  umn name list in
133a0 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74   a VIEW */.  int
133b0 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
133c0 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
133d0 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61  page for this ta
133e0 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61  ble */.  u32 nTa
133f0 62 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a  bRef;         /*
13400 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
13410 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c  ers to this Tabl
13420 65 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c  e */.  u32 tabFl
13430 61 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  ags;        /* M
13440 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75  ask of TF_* valu
13450 65 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65  es */.  i16 iPKe
13460 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  y;           /* 
13470 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c  If not negative,
13480 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d   use aCol[iPKey]
13490 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   as the rowid */
134a0 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20  .  i16 nCol;    
134b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
134c0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
134d0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
134e0 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
134f0 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
13500 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
13510 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
13520 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  at1 table */.  L
13530 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
13540 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
13550 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
13560 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
13570 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
13580 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
13590 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
135a0 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
135b0 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
135c0 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
135d0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
135e0 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
135f0 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
13600 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
13610 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
13620 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
13630 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
13640 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
13650 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
13660 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
13670 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
13680 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
13690 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
136a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
136b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
136c0 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
136d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
136e0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
136f0 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
13700 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
13710 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c  rg;  /* 0: modul
13720 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76  e 1: schema 2: v
13730 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61  tab name 3...: a
13740 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  rgs */.  VTable 
13750 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
13760 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
13770 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
13780 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
13790 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
137a0 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
137b0 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
137c0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
137d0 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
137e0 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
137f0 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
13800 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
13810 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
13820 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
13830 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
13840 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
13850 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
13860 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a  e.tabFlags..**.*
13870 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  * TF_OOOHidden a
13880 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73  pplies to tables
13890 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61   or view that ha
138a0 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  ve hidden column
138b0 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f  s that are.** fo
138c0 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69  llowed by non-hi
138d0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45  dden columns.  E
138e0 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45  xample:  "CREATE
138f0 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78   VIRTUAL TABLE x
13900 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28   USING.** vtab1(
13910 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20  a HIDDEN, b);". 
13920 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20   Since "b" is a 
13930 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
13940 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64  n but "a" is hid
13950 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f  den,.** the TF_O
13960 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75  OOHidden attribu
13970 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69  te would apply i
13980 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75  n this case.  Su
13990 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72  ch tables requir
139a0 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e  e.** special han
139b0 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53  dling during INS
139c0 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a  ERT processing..
139d0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
139e0 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
139f0 30 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d  0001    /* Read-
13a00 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c  only system tabl
13a10 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
13a20 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20  Ephemeral       
13a30 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20  0x0002    /* An 
13a40 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
13a50 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
13a60 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
13a70 30 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0004    /* Table
13a80 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
13a90 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
13aa0 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
13ab0 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e   0x0008    /* In
13ac0 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
13ad0 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
13ae0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
13af0 5f 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20  _HasStat1       
13b00 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52   0x0010    /* nR
13b10 6f 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f  owLogEst set fro
13b20 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a  m sqlite_stat1 *
13b30 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
13b40 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30  houtRowid    0x0
13b50 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  020    /* No row
13b60 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59  id.  PRIMARY KEY
13b70 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23   is the key */.#
13b80 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69  define TF_NoVisi
13b90 62 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30  bleRowid  0x0040
13ba0 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76      /* No user-v
13bb0 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63  isible "rowid" c
13bc0 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
13bd0 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20   TF_OOOHidden   
13be0 20 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a      0x0080    /*
13bf0 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69   Out-of-Order hi
13c00 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  dden columns */.
13c10 23 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73  #define TF_Stats
13c20 55 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30  Used       0x010
13c30 30 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c  0    /* Query pl
13c40 61 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20  anner decisions 
13c50 61 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20  affected by.    
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c80 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c   ** Index.aiRowL
13c90 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a  ogEst[] values *
13ca0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
13cb0 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30  NotNull      0x0
13cc0 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69  200    /* Contai
13cd0 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  ns NOT NULL cons
13ce0 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
13cf0 6e 65 20 54 46 5f 53 68 61 64 6f 77 20 20 20 20  ne TF_Shadow    
13d00 20 20 20 20 20 20 30 78 30 34 30 30 20 20 20 20        0x0400    
13d10 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 73 68  /* True for a sh
13d20 61 64 6f 77 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f  adow table */../
13d30 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
13d40 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
13d50 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72  a table is a vir
13d60 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69  tual table.  Thi
13d70 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20  s is.** done as 
13d80 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20  a macro so that 
13d90 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d  it will be optim
13da0 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69  ized out when vi
13db0 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73  rtual.** table s
13dc0 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65  upport is omitte
13dd0 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
13de0 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
13df0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
13e00 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
13e10 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
13e20 20 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41    ((X)->nModuleA
13e30 72 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  rg).#else.#  def
13e40 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
13e50 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a        0.#endif..
13e60 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
13e70 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63  determine if a c
13e80 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e  olumn is hidden.
13e90 20 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64    IsOrdinaryHidd
13ea0 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e  enColumn().** on
13eb0 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e  ly works for non
13ec0 2d 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20  -virtual tables 
13ed0 28 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73  (ordinary tables
13ee0 20 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20   and views) and 
13ef0 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c  is.** always fal
13f00 73 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45  se unless SQLITE
13f10 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
13f20 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65  OLUMNS is define
13f30 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64  d.  The.** IsHid
13f40 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72  denColumn() macr
13f50 6f 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72  o is general pur
13f60 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  pose..*/.#if def
13f70 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
13f80 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
13f90 53 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  S).#  define IsH
13fa0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
13fb0 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f         (((X)->co
13fc0 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
13fd0 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20  _HIDDEN)!=0).#  
13fe0 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72  define IsOrdinar
13ff0 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  yHiddenColumn(X)
14000 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
14010 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
14020 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65  N)!=0).#elif !de
14030 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
14040 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
14050 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
14060 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
14070 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c      (((X)->colFl
14080 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
14090 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66  DDEN)!=0).#  def
140a0 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
140b0 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
140c0 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
140d0 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
140e0 29 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64  )         0.#  d
140f0 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
14100 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
14110 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f  0.#endif.../* Do
14120 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76  es the table hav
14130 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  e a rowid */.#de
14140 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29  fine HasRowid(X)
14150 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
14160 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75  lags & TF_Withou
14170 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66  tRowid)==0).#def
14180 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64  ine VisibleRowid
14190 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c  (X) (((X)->tabFl
141a0 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62  ags & TF_NoVisib
141b0 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  leRowid)==0)../*
141c0 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
141d0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
141e0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
141f0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
14200 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
14210 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
14220 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
14230 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
14240 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
14250 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
14260 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
14270 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
14280 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
14290 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
142a0 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
142b0 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
142c0 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
142d0 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
142e0 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
142f0 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
14300 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
14310 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
14320 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
14330 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
14340 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
14350 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
14360 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
14370 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
14380 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
14390 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
143a0 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
143b0 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
143c0 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
143d0 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
143e0 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
143f0 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
14400 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
14410 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
14420 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
14430 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
14440 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
14450 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
14460 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
14470 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
14480 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
14490 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
144a0 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
144b0 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
144c0 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
144d0 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
144e0 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
144f0 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
14500 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
14510 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
14520 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
14530 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
14540 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
14550 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
14560 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
14570 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
14580 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
14590 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
145a0 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
145b0 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
145c0 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
145d0 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
145e0 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
145f0 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
14600 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
14610 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
14620 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
14630 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
14640 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
14650 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
14660 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
14670 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
14680 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
14690 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
146a0 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
146b0 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
146c0 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
146d0 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
146e0 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
146f0 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
14700 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
14710 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
14720 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
14730 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
14740 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
14750 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
14760 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
14770 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
14780 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
14790 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
147a0 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
147b0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
147c0 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
147d0 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
147e0 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
147f0 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
14800 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
14810 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
14820 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
14830 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
14840 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
14850 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
14860 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
14870 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
14880 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
14890 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
148a0 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
148b0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
148c0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
148d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
148e0 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
148f0 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
14900 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
14910 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
14920 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
14930 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
14940 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
14950 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
14960 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
14970 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
14980 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
14990 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
149a0 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
149b0 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
149c0 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
149d0 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
149e0 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
149f0 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
14a00 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
14a10 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
14a20 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
14a30 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
14a40 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
14a50 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
14a60 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
14a70 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
14a80 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
14a90 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
14aa0 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
14ab0 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
14ac0 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
14ad0 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
14ae0 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
14af0 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
14b00 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
14b10 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
14b20 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
14b30 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
14b40 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
14b50 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
14b60 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
14b70 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
14b80 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
14b90 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
14ba0 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
14bb0 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
14bc0 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
14bd0 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
14be0 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
14bf0 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
14c00 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
14c10 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
14c20 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
14c30 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
14c40 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
14c50 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
14c60 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
14c70 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
14c80 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
14c90 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
14ca0 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
14cb0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
14cc0 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
14cd0 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
14ce0 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
14cf0 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
14d00 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
14d10 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
14d20 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
14d30 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
14d40 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
14d50 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
14d60 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
14d70 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
14d80 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
14d90 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
14da0 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
14db0 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
14dc0 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
14dd0 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
14de0 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
14df0 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
14e00 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
14e10 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
14e20 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
14e30 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
14e40 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
14e50 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
14e60 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
14e70 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
14e80 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
14e90 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a  oreign key..**.*
14ea0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
14eb0 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20  symbolic values 
14ec0 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
14ed0 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a  rd which type.**
14ee0 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61   of action to ta
14ef0 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ke..*/.#define O
14f00 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f  E_None     0   /
14f10 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * There is no co
14f20 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63  nstraint to chec
14f30 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  k */.#define OE_
14f40 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20  Rollback 1   /* 
14f50 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69  Fail the operati
14f60 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20  on and rollback 
14f70 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
14f80 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62  */.#define OE_Ab
14f90 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61  ort    2   /* Ba
14fa0 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62  ck out changes b
14fb0 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63  ut do no rollbac
14fc0 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  k transaction */
14fd0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c  .#define OE_Fail
14fe0 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70       3   /* Stop
14ff0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62   the operation b
15000 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69  ut leave all pri
15010 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  or changes */.#d
15020 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20  efine OE_Ignore 
15030 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20    4   /* Ignore 
15040 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f  the error. Do no
15050 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20  t do the INSERT 
15060 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
15070 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20  fine OE_Replace 
15080 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65   5   /* Delete e
15090 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20  xisting record, 
150a0 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f  then do INSERT o
150b0 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
150c0 69 6e 65 20 4f 45 5f 55 70 64 61 74 65 20 20 20  ine OE_Update   
150d0 36 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 61  6   /* Process a
150e0 73 20 61 20 44 4f 20 55 50 44 41 54 45 20 69 6e  s a DO UPDATE in
150f0 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 23 64   an upsert */.#d
15100 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
15110 74 20 37 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 7   /* OE_Abor
15120 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
15130 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
15140 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
15150 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
15160 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
15170 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
15180 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
15190 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
151a0 20 39 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   9   /* Set the 
151b0 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
151c0 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
151d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
151e0 61 73 63 61 64 65 20 20 31 30 20 20 2f 2a 20 43  ascade  10  /* C
151f0 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
15200 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
15210 5f 44 65 66 61 75 6c 74 20 20 31 31 20 20 2f 2a  _Default  11  /*
15220 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65   Do whatever the
15230 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20   default action 
15240 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  is */.../*.** An
15250 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
15260 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
15270 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61  ture is passed a
15280 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
15290 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
152a0 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65  e3VdbeKeyCompare
152b0 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20   and is used to 
152c0 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63  control the.** c
152d0 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
152e0 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
152f0 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
15300 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
15310 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
15320 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
15330 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
15340 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
15350 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
15360 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
15370 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
15380 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
15390 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
153a0 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
153b0 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
153c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
153d0 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
153e0 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
153f0 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
15400 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
15410 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
15420 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
15430 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
15440 31 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20  16 nKeyField;   
15450 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15460 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
15470 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
15480 36 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20  6 nAllField;    
15490 20 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d    /* Total colum
154a0 6e 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65  ns, including ke
154b0 79 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f  y plus others */
154c0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
154d0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
154e0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
154f0 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
15500 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f  Order;     /* So
15510 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
15520 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
15530 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
15540 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
15550 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
15560 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
15570 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
15580 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
15590 20 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20   a record which 
155a0 68 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20  has been parsed 
155b0 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
155c0 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66  ual.** fields, f
155d0 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
155e0 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61  of doing a compa
155f0 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72  rison..**.** A r
15600 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65  ecord is an obje
15610 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ct that contains
15620 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65   one or more fie
15630 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20  lds of data..** 
15640 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64  Records are used
15650 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f   to store the co
15660 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65  ntent of a table
15670 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72   row and to stor
15680 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20  e.** the key of 
15690 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f  an index.  A blo
156a0 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  b encoding of a 
156b0 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65  record is create
156c0 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d  d by.** the OP_M
156d0 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
156e0 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64   of the VDBE and
156f0 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64   is disassembled
15700 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f   by the.** OP_Co
15710 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  lumn opcode..**.
15720 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
15730 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65  f this object se
15740 72 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20  rves as a "key" 
15750 66 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72  for doing a sear
15760 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65  ch on.** an inde
15770 78 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f  x b+tree. The go
15780 61 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  al of the search
15790 20 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20   is to find the 
157a0 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73  entry that.** is
157b0 20 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b   closed to the k
157c0 65 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20  ey described by 
157d0 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68  this object.  Th
157e0 69 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20  is object might 
157f0 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70  hold.** just a p
15800 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
15810 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
15820 20 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e   fields is given
15830 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d   by.** pKeyInfo-
15840 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  >nField..**.** T
15850 68 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65  he r1 and r2 fie
15860 6c 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75  lds are the valu
15870 65 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  es to return if 
15880 74 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73  this key is less
15890 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61   than.** or grea
158a0 74 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69  ter than a key i
158b0 6e 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73  n the btree, res
158c0 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73  pectively.  Thes
158d0 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a  e are normally.*
158e0 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70  * -1 and +1 resp
158f0 65 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69  ectively, but mi
15900 67 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20  ght be inverted 
15910 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20  to +1 and -1 if 
15920 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73  the b-tree.** is
15930 20 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a   in DESC order..
15940 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f  **.** The key co
15950 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
15960 6e 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75  ns actually retu
15970 72 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68  rn default_rc wh
15980 65 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20  en they find.** 
15990 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72  an equals compar
159a0 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72  ison.  default_r
159b0 63 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20  c can be -1, 0, 
159c0 6f 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65  or +1.  If there
159d0 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65   are.** multiple
159e0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
159f0 62 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20  b-tree with the 
15a00 73 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f  same key (when o
15a10 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61  nly looking.** a
15a20 74 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79  t the first pKey
15a30 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20  Info->nFields,) 
15a40 74 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20  then default_rc 
15a50 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31  can be set to -1
15a60 20 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65   to.** cause the
15a70 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20   search to find 
15a80 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20  the last match, 
15a90 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74  or +1 to cause t
15aa0 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20  he search to.** 
15ab0 66 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d  find the first m
15ac0 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  atch..**.** The 
15ad0 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
15ae0 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65  unctions will se
15af0 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65  t eqSeen to true
15b00 20 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a   if they ever.**
15b10 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72   get and equal r
15b20 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70  esults when comp
15b30 61 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63  aring this struc
15b40 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65  ture to a b-tree
15b50 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e   record..** When
15b60 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20   default_rc!=0, 
15b70 74 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74  the search might
15b80 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72   end up on the r
15b90 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c  ecord immediatel
15ba0 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20  y.** before the 
15bb0 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69  first match or i
15bc0 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72  mmediately after
15bd0 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e   the last match.
15be0 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20    The.** eqSeen 
15bf0 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63  field will indic
15c00 61 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ate whether or n
15c10 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63  ot an exact matc
15c20 68 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a  h exists in the.
15c30 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74  ** b-tree..*/.st
15c40 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
15c50 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20  ord {.  KeyInfo 
15c60 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43  *pKeyInfo;  /* C
15c70 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72  ollation and sor
15c80 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74  t-order informat
15c90 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d  ion */.  Mem *aM
15ca0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
15cb0 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  Values */.  u16 
15cc0 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
15cd0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
15ce0 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
15cf0 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f  */.  i8 default_
15d00 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70  rc;      /* Comp
15d10 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66  arison result if
15d20 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20   keys are equal 
15d30 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b  */.  u8 errCode;
15d40 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
15d50 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52  r detected by xR
15d60 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f  ecordCompare (CO
15d70 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20  RRUPT or NOMEM) 
15d80 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20  */.  i8 r1;     
15d90 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
15da0 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
15db0 6c 68 73 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20  lhs < rhs) */.  
15dc0 69 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20  i8 r2;          
15dd0 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
15de0 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e  return if (lhs >
15df0 20 72 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71   rhs) */.  u8 eq
15e00 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  Seen;          /
15e10 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75  * True if an equ
15e20 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e  ality comparison
15e30 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a   has been seen *
15e40 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
15e50 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
15e60 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
15e70 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
15e80 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
15e90 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
15ea0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
15eb0 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
15ec0 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
15ed0 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
15ee0 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
15ef0 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
15f00 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
15f10 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
15f20 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
15f30 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
15f40 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
15f50 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
15f60 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
15f70 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
15f80 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
15f90 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
15fa0 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
15fb0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
15fc0 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
15fd0 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
15fe0 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
15ff0 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
16000 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
16010 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
16020 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
16030 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
16040 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
16050 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
16060 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
16070 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
16080 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
16090 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
160a0 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
160b0 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72  cause the.** fir
160c0 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  st column to be 
160d0 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73  indexed (c3) has
160e0 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69   an index of 2 i
160f0 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a  n Ex1.aCol[]..**
16100 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75   The second colu
16110 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
16120 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64   (c1) has an ind
16130 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78  ex of 0 in.** Ex
16140 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20  1.aCol[], hence 
16150 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d  Ex2.aiColumn[1]=
16160 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e  =0..**.** The In
16170 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c  dex.onError fiel
16180 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65  d determines whe
16190 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
161a0 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a  indexed columns.
161b0 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75  ** must be uniqu
161c0 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f  e and what to do
161d0 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74   if they are not
161e0 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e  .  When Index.on
161f0 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a  Error=OE_None,.*
16200 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20  * it means this 
16210 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20  is not a unique 
16220 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73  index.  Otherwis
16230 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65  e it is a unique
16240 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68   index.** and th
16250 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78  e value of Index
16260 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74  .onError indicat
16270 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66  e the which conf
16280 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
16290 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
162a0 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
162b0 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
162c0 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
162d0 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
162e0 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c  ment..**.** Whil
162f0 65 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41  e parsing a CREA
16300 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41  TE TABLE or CREA
16310 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
16320 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  nt in order to.*
16330 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20  * generate VDBE 
16340 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64  code (as opposed
16350 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20   to parsing one 
16360 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c  read from an sql
16370 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61  ite_master.** ta
16380 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70  ble as part of p
16390 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69  arsing an existi
163a0 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
163b0 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69  ma), transient i
163c0 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74  nstances.** of t
163d0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61  his structure ma
163e0 79 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e  y be created. In
163f0 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49   this case the I
16400 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62  ndex.tnum variab
16410 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  le is.** used to
16420 20 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65   store the addre
16430 73 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73  ss of a VDBE ins
16440 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20  truction, not a 
16450 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a  database page.**
16460 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e   number (it cann
16470 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73  ot - the databas
16480 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c  e page is not al
16490 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68  located until th
164a0 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61  e VDBE.** progra
164b0 6d 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20  m is executed). 
164c0 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74  See convertToWit
164d0 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29  houtRowidTable()
164e0 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
164f0 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a  .struct Index {.
16500 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
16510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
16520 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
16530 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c   */.  i16 *aiCol
16540 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  umn;           /
16550 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  * Which columns 
16560 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73  are used by this
16570 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20   index.  1st is 
16580 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61  0 */.  LogEst *a
16590 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20  iRowLogEst;     
165a0 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a  /* From ANALYZE:
165b0 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63   Est. rows selec
165c0 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75  ted by each colu
165d0 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  mn */.  Table *p
165e0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
165f0 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c   /* The SQL tabl
16600 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e being indexed 
16610 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
16620 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ff;           /*
16630 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
16640 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
16650 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
16660 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20    Index *pNext; 
16670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
16680 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73  e next index ass
16690 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
166a0 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20   same table */. 
166b0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
166c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  ;         /* Sch
166d0 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
166e0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
166f0 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
16700 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65          /* for e
16710 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65  ach column: True
16720 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41  ==DESC, False==A
16730 53 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  SC */.  const ch
16740 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20  ar **azColl;    
16750 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c   /* Array of col
16760 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
16770 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20  names for index 
16780 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74  */.  Expr *pPart
16790 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a  IdxWhere;     /*
167a0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
167b0 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65  r partial indice
167c0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
167d0 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20  *aColExpr;      
167e0 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73  /* Column expres
167f0 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74  sions */.  int t
16800 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
16810 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63      /* DB Page c
16820 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f  ontaining root o
16830 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
16840 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f    LogEst szIdxRo
16850 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73  w;         /* Es
16860 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20  timated average 
16870 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65  row size in byte
16880 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43  s */.  u16 nKeyC
16890 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
168a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
168b0 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65  umns forming the
168c0 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43   key */.  u16 nC
168d0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
168e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
168f0 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69  columns stored i
16900 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
16910 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20   u8 onError;    
16920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
16930 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65  Abort, OE_Ignore
16940 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72  , OE_Replace, or
16950 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e   OE_None */.  un
16960 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32  signed idxType:2
16970 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49  ;      /* 1==UNI
16980 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20  QUE, 2==PRIMARY 
16990 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49  KEY, 0==CREATE I
169a0 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  NDEX */.  unsign
169b0 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b  ed bUnordered:1;
169c0 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69     /* Use this i
169d0 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49  ndex for == or I
169e0 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a  N queries only *
169f0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69  /.  unsigned uni
16a00 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20  qNotNull:1;  /* 
16a10 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61  True if UNIQUE a
16a20 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20  nd NOT NULL for 
16a30 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  all columns */. 
16a40 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69   unsigned isResi
16a50 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  zed:1;    /* Tru
16a60 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78  e if resizeIndex
16a70 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65  Object() has bee
16a80 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e  n called */.  un
16a90 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e  signed isCoverin
16aa0 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  g:1;   /* True i
16ab0 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65  f this is a cove
16ac0 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ring index */.  
16ad0 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53  unsigned noSkipS
16ae0 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e  can:1;   /* Do n
16af0 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b  ot try to use sk
16b00 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20  ip-scan if true 
16b10 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68 61  */.  unsigned ha
16b20 73 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a  sStat1:1;     /*
16b30 20 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c   aiRowLogEst val
16b40 75 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71  ues come from sq
16b50 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20  lite_stat1 */.  
16b60 75 6e 73 69 67 6e 65 64 20 62 4e 6f 51 75 65 72  unsigned bNoQuer
16b70 79 3a 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e  y:1;     /* Do n
16b80 6f 74 20 75 73 65 20 74 68 69 73 20 69 6e 64 65  ot use this inde
16b90 78 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75  x to optimize qu
16ba0 65 72 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20  eries */.#ifdef 
16bb0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
16bc0 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
16bd0 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
16be0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16bf0 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
16c00 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
16c10 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
16c20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
16c30 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
16c40 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
16c50 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
16c60 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
16c70 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
16c80 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
16c90 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
16ca0 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
16cb0 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
16cc0 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
16cd0 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
16ce0 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
16cf0 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
16d00 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
16d10 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
16d20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63  index */.  tRowc
16d30 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20  nt nRowEst0;    
16d40 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
16d50 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66  ithmic number of
16d60 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
16d70 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 42  ex */.#endif.  B
16d80 69 74 6d 61 73 6b 20 63 6f 6c 4e 6f 74 49 64 78  itmask colNotIdx
16d90 65 64 3b 20 20 20 20 20 2f 2a 20 30 20 66 6f 72  ed;     /* 0 for
16da0 20 75 6e 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d   unindexed colum
16db0 6e 73 20 69 6e 20 70 54 61 62 20 2a 2f 0a 7d 3b  ns in pTab */.};
16dc0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
16dd0 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78  values for Index
16de0 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66  .idxType.*/.#def
16df0 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
16e00 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30  PE_APPDEF      0
16e10 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73     /* Created us
16e20 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58  ing CREATE INDEX
16e30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
16e40 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55  TE_IDXTYPE_UNIQU
16e50 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d  E      1   /* Im
16e60 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55  plements a UNIQU
16e70 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  E constraint */.
16e80 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
16e90 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
16ea0 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65  Y  2   /* Is the
16eb0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72   PRIMARY KEY for
16ec0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f   the table */../
16ed0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
16ee0 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52   index X is a PR
16ef0 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20  IMARY KEY index 
16f00 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69  */.#define IsPri
16f10 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20  maryKeyIndex(X) 
16f20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d   ((X)->idxType==
16f30 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
16f40 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52  RIMARYKEY)../* R
16f50 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
16f60 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55  dex X is a UNIQU
16f70 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  E index */.#defi
16f80 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  ne IsUniqueIndex
16f90 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f  (X)      ((X)->o
16fa0 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29  nError!=OE_None)
16fb0 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61  ../* The Index.a
16fc0 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73  iColumn[] values
16fd0 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f   are normally po
16fe0 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20  sitive integer. 
16ff0 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72   But.** there ar
17000 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20  e some negative 
17010 76 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65  values that have
17020 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
17030 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  :.*/.#define XN_
17040 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20  ROWID     (-1)  
17050 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
17060 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69  lumn is the rowi
17070 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  d */.#define XN_
17080 45 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20  EXPR      (-2)  
17090 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
170a0 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
170b0 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ssion */../*.** 
170c0 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
170d0 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
170e0 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20  _stat3 table is 
170f0 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
17100 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61  emory.** using a
17110 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
17120 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
17130 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
17140 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
17150 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
17160 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
17170 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
17180 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
17190 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69  exSample {.  voi
171a0 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f  d *p;          /
171b0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d  * Pointer to sam
171c0 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20  pled record */. 
171d0 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
171e0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65     /* Size of re
171f0 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f  cord in bytes */
17200 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71  .  tRowcnt *anEq
17210 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
17220 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
17230 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
17240 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
17250 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b    tRowcnt *anLt;
17260 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
17270 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
17280 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
17290 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
172a0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c  .  tRowcnt *anDL
172b0 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  t;   /* Est. num
172c0 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
172d0 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
172e0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
172f0 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
17300 20 76 61 6c 75 65 73 20 74 6f 20 75 73 65 20 77   values to use w
17310 69 74 68 69 6e 20 74 68 65 20 66 6c 61 67 73 20  ithin the flags 
17320 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
17330 74 65 33 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a  te3GetToken()..*
17340 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
17350 5f 54 4f 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20  _TOKEN_QUOTED   
17360 20 30 78 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73   0x1 /* Token is
17370 20 61 20 71 75 6f 74 65 64 20 69 64 65 6e 74 69   a quoted identi
17380 66 69 65 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  fier. */.#define
17390 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45   SQLITE_TOKEN_KE
173a0 59 57 4f 52 44 20 20 20 30 78 32 20 2f 2a 20 54  YWORD   0x2 /* T
173b0 6f 6b 65 6e 20 69 73 20 61 20 6b 65 79 77 6f 72  oken is a keywor
173c0 64 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  d. */../*.** Eac
173d0 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
173e0 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
173f0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
17400 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
17410 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
17420 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
17430 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
17440 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  ion..**.** The m
17450 65 6d 6f 72 79 20 74 68 61 74 20 22 7a 22 20 70  emory that "z" p
17460 6f 69 6e 74 73 20 74 6f 20 69 73 20 6f 77 6e 65  oints to is owne
17470 64 20 62 79 20 6f 74 68 65 72 20 6f 62 6a 65 63  d by other objec
17480 74 73 2e 20 20 54 61 6b 65 20 63 61 72 65 0a 2a  ts.  Take care.*
17490 2a 20 74 68 61 74 20 74 68 65 20 6f 77 6e 65 72  * that the owner
174a0 20 6f 66 20 74 68 65 20 22 7a 22 20 73 74 72 69   of the "z" stri
174b0 6e 67 20 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c  ng does not deal
174c0 6c 6f 63 61 74 65 20 74 68 65 20 73 74 72 69 6e  locate the strin
174d0 67 20 62 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20  g before.** the 
174e0 54 6f 6b 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f  Token goes out o
174f0 66 20 73 63 6f 70 65 21 20 20 56 65 72 79 20 6f  f scope!  Very o
17500 66 74 65 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f  ften, the "z" po
17510 69 6e 74 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61  ints to some pla
17520 63 65 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64  ce.** in the mid
17530 64 6c 65 20 6f 66 20 74 68 65 20 50 61 72 73 65  dle of the Parse
17540 2e 7a 53 71 6c 20 74 65 78 74 2e 20 20 42 75 74  .zSql text.  But
17550 20 69 74 20 6d 69 67 68 74 20 61 6c 73 6f 20 70   it might also p
17560 6f 69 6e 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61  oint to a.** sta
17570 74 69 63 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73  tic string..*/.s
17580 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20  truct Token {.  
17590 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20  const char *z;  
175a0 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
175b0 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55  e token.  Not NU
175c0 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a  LL-terminated! *
175d0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
175e0 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72   n;    /* Number
175f0 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
17600 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a  n this token */.
17610 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
17620 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
17630 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
17640 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
17650 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
17660 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45  ** code for a SE
17670 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69  LECT that contai
17680 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
17690 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
176a0 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47   Expr.op==TK_AGG
176b0 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47  _COLUMN or TK_AG
176c0 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20  G_FUNCTION then 
176d0 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73  Expr.pAggInfo is
176e0 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
176f0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
17700 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75    The Expr.iColu
17710 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  mn field is the 
17720 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49  index in.** AggI
17730 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67  nfo.aCol[] or Ag
17740 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66  gInfo.aFunc[] of
17750 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
17760 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
17770 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74  ** code for that
17780 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67   node..**.** Agg
17790 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e  Info.pGroupBy an
177a0 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e  d AggInfo.aFunc.
177b0 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66  pExpr point to f
177c0 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65  ields within the
177d0 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c  .** original Sel
177e0 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68  ect structure th
177f0 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
17800 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
17810 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65  t.  These.** fie
17820 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  lds do not need 
17830 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e  to be freed when
17840 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
17850 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74  e AggInfo struct
17860 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ure..*/.struct A
17870 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69  ggInfo {.  u8 di
17880 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20  rectMode;       
17890 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e     /* Direct ren
178a0 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e  dering mode mean
178b0 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65  s take data dire
178c0 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ctly.           
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
178e0 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61  * from source ta
178f0 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e  bles rather than
17900 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f   from accumulato
17910 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f  rs */.  u8 useSo
17920 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
17930 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64  /* In direct mod
17940 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65  e, reference the
17950 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72   sorting index r
17960 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20  ather.          
17970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17980 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72  ** than the sour
17990 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  ce table */.  in
179a0 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  t sortingIdx;   
179b0 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
179c0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
179d0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
179e0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50   int sortingIdxP
179f0 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73  Tab;     /* Curs
17a00 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65  or number of pse
17a10 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69  udo-table */.  i
17a20 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d  nt nSortingColum
17a30 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
17a40 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
17a50 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
17a60 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c   */.  int mnReg,
17a70 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a   mxReg;       /*
17a80 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74   Range of regist
17a90 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ers allocated fo
17aa0 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63  r aCol and aFunc
17ab0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
17ac0 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a  pGroupBy;     /*
17ad0 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c   The group by cl
17ae0 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  ause */.  struct
17af0 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20   AggInfo_col {  
17b00 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f    /* For each co
17b10 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75  lumn used in sou
17b20 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20  rce tables */.  
17b30 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
17b40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f             /* So
17b50 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
17b60 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
17b70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
17b80 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
17b90 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
17ba0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75  */.    int iColu
17bb0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
17bc0 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
17bd0 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72   within the sour
17be0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
17bf0 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d  int iSorterColum
17c00 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  n;       /* Colu
17c10 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  mn number in the
17c20 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
17c30 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17c50 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
17c60 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
17c70 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
17c80 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
17c90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
17ca0 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65  e original expre
17cb0 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43  ssion */.  } *aC
17cc0 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d  ol;.  int nColum
17cd0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
17ce0 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20   Number of used 
17cf0 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b  entries in aCol[
17d00 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75  ] */.  int nAccu
17d10 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f  mulator;       /
17d20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
17d30 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68  mns that show th
17d40 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74  rough to the out
17d50 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20  put..           
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17d70 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c  * Additional col
17d80 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e  umns are used on
17d90 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73  ly as parameters
17da0 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20   to.            
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
17dc0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
17dd0 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
17de0 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20   AggInfo_func { 
17df0 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67    /* For each ag
17e00 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17e10 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
17e20 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
17e30 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65   /* Expression e
17e40 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63  ncoding the func
17e50 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63  tion */.    Func
17e60 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
17e70 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72       /* The aggr
17e80 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
17e90 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
17ea0 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17ec0 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
17ed0 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
17ee0 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
17ef0 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20   int iDistinct; 
17f00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68            /* Eph
17f10 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65  emeral table use
17f20 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53  d to enforce DIS
17f30 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46  TINCT */.  } *aF
17f40 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63  unc;.  int nFunc
17f50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
17f60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
17f70 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a  ies in aFunc[] *
17f80 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
17f90 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69  datatype ynVar i
17fa0 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67  s a signed integ
17fb0 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69  er, either 16-bi
17fc0 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20  t or 32-bit..** 
17fd0 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36  Usually it is 16
17fe0 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53  -bits.  But if S
17ff0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
18000 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65  LE_NUMBER is gre
18010 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37  ater.** than 327
18020 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61  67 we have to ma
18030 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31  ke it 32-bit.  1
18040 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72  6-bit is preferr
18050 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74  ed because.** it
18060 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72   uses less memor
18070 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62  y in the Expr ob
18080 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61  ject, which is a
18090 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72   big memory user
180a0 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77  .** in systems w
180b0 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70  ith lots of prep
180c0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  ared statements.
180d0 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63    And few applic
180e0 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d  ations.** need m
180f0 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31  ore than about 1
18100 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65  0 or 20 variable
18110 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74  s.  But some ext
18120 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a  reme users want.
18130 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61  ** to have prepa
18140 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
18150 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76  ith over 32767 v
18160 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f  ariables, and fo
18170 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70  r them.** the op
18180 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
18190 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  e (at compile-ti
181a0 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  me)..*/.#if SQLI
181b0 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
181c0 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79  NUMBER<=32767.ty
181d0 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b  pedef i16 ynVar;
181e0 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69  .#else.typedef i
181f0 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66  nt ynVar;.#endif
18200 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64  ../*.** Each nod
18210 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  e of an expressi
18220 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20  on in the parse 
18230 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61  tree is an insta
18240 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
18250 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
18260 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f  Expr.op is the o
18270 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67  pcode. The integ
18280 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20  er parser token 
18290 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64  codes are reused
182a0 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68  .** as opcodes h
182b0 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65  ere. For example
182c0 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66  , the parser def
182d0 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65  ines TK_GE to be
182e0 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63   an integer.** c
182f0 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ode representing
18300 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74   the ">=" operat
18310 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e  or. This same in
18320 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65  teger code is re
18330 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65  used.** to repre
18340 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72  sent the greater
18350 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74  -than-or-equal-t
18360 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  o operator in th
18370 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  e expression.** 
18380 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tree..**.** If t
18390 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
183a0 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
183b0 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f  (TK_INTEGER, TK_
183c0 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a  FLOAT, TK_BLOB,.
183d0 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29  ** or TK_STRING)
183e0 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
183f0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74  n contains the t
18400 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c  ext of the SQL l
18410 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68  iteral. If.** th
18420 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
18430 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56  a variable (TK_V
18440 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45  ARIABLE), then E
18450 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
18460 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62  ns the.** variab
18470 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79  le name. Finally
18480 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  , if the express
18490 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
184a0 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54  nction (TK_FUNCT
184b0 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78  ION),.** then Ex
184c0 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
184d0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
184e0 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  e function..**.*
184f0 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e  * Expr.pRight an
18500 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65  d Expr.pLeft are
18510 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
18520 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f  ght subexpressio
18530 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72  ns of a.** binar
18540 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68  y operator. Eith
18550 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62  er or both may b
18560 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78  e NULL..**.** Ex
18570 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20  pr.x.pList is a 
18580 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74  list of argument
18590 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  s if the express
185a0 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
185b0 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53  nction,.** a CAS
185c0 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20  E expression or 
185d0 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e  an IN expression
185e0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c   of the form "<l
185f0 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e  hs> IN (<y>, <z>
18600 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78  ...)"..** Expr.x
18610 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64  .pSelect is used
18620 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
18630 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65  on is a sub-sele
18640 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73  ct or an express
18650 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f  ion of.** the fo
18660 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45  rm "<lhs> IN (SE
18670 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74  LECT ...)". If t
18680 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  he EP_xIsSelect 
18690 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68  bit is set in th
186a0 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
186b0 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e  mask, then Expr.
186c0 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
186d0 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45  id. Otherwise, E
186e0 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a  xpr.x.pList is.*
186f0 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41  * valid..**.** A
18700 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  n expression of 
18710 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49  the form ID or I
18720 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61  D.ID refers to a
18730 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62   column in a tab
18740 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20  le..** For such 
18750 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70  expressions, Exp
18760 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54  r.op is set to T
18770 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70  K_COLUMN and Exp
18780 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74  r.iTable is.** t
18790 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f  he integer curso
187a0 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44  r number of a VD
187b0 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  BE cursor pointi
187c0 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ng to that table
187d0 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f   and.** Expr.iCo
187e0 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75  lumn is the colu
187f0 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  mn number for th
18800 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d  e specific colum
18810 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78  n.  If the.** ex
18820 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64  pression is used
18830 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20   as a result in 
18840 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c  an aggregate SEL
18850 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ECT, then the.**
18860 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73   value is also s
18870 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70  tored in the Exp
18880 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e  r.iAgg column in
18890 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
188a0 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e  o that.** it can
188b0 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74   be accessed aft
188c0 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65  er all aggregate
188d0 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a  s are computed..
188e0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
188f0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e  ression is an un
18900 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d  bound variable m
18910 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f  arker (a questio
18920 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63  n mark.** charac
18930 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
18940 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
18950 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  n the Expr.iTabl
18960 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65  e holds the inde
18970 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20  x.** number for 
18980 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a  that variable..*
18990 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
189a0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71  ession is a subq
189b0 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69  uery then Expr.i
189c0 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20  Column holds an 
189d0 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73  integer.** regis
189e0 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61  ter number conta
189f0 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ining the result
18a00 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79   of the subquery
18a10 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62  .  If the.** sub
18a20 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f  query gives a co
18a30 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74  nstant result, t
18a40 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31  hen iTable is -1
18a50 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65  .  If the subque
18a60 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69  ry.** gives a di
18a70 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61  fferent answer a
18a80 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65  t different time
18a90 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65  s during stateme
18aa0 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a  nt processing.**
18ab0 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
18ac0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
18ad0 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74   subroutine that
18ae0 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75   computes the su
18af0 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66  bquery..**.** If
18b00 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20   the Expr is of 
18b10 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  type OP_Column, 
18b20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74  and the table it
18b30 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72   is selecting fr
18b40 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20  om.** is a disk 
18b50 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c  table or the "ol
18b60 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c  d.*" pseudo-tabl
18b70 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69  e, then pTab poi
18b80 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  nts to the.** co
18b90 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
18ba0 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a  e definition..**
18bb0 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e  .** ALLOCATION N
18bc0 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72  OTES:.**.** Expr
18bd0 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65   objects can use
18be0 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79   a lot of memory
18bf0 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61   space in databa
18c00 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a  se schema.  To.*
18c10 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65  * help reduce me
18c20 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74  mory requirement
18c30 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20  s, sometimes an 
18c40 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c  Expr object will
18c50 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64   be.** truncated
18c60 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65  .  And to reduce
18c70 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
18c80 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
18c90 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20  s, sometimes.** 
18ca0 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72  two or more Expr
18cb0 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65   objects will be
18cc0 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
18cd0 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  gle memory alloc
18ce0 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68  ation,.** togeth
18cf0 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f  er with Expr.zTo
18d00 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a  ken strings..**.
18d10 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  ** If the EP_Red
18d20 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65  uced and EP_Toke
18d30 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20  nOnly flags are 
18d40 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45  set when.** an E
18d50 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72  xpr object is tr
18d60 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45  uncated.  When E
18d70 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
18d80 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68  , then all.** th
18d90 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a  e child Expr obj
18da0 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  ects in the Expr
18db0 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e  .pLeft and Expr.
18dc0 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a  pRight subtrees.
18dd0 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ** are contained
18de0 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
18df0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
18e00 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76  on.  Note, howev
18e10 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  er, that.** the 
18e20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72  subtrees in Expr
18e30 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72  .x.pList or Expr
18e40 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61  .x.pSelect are a
18e50 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79  lways separately
18e60 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72  .** allocated, r
18e70 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
18e80 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52  ther or not EP_R
18e90 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a  educed is set..*
18ea0 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a  /.struct Expr {.
18eb0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
18ec0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72           /* Oper
18ed0 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20  ation performed 
18ee0 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
18ef0 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
18f00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
18f10 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20  affinity of the 
18f20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e  column or 0 if n
18f30 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  ot a column */. 
18f40 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20   u32 flags;     
18f50 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
18f60 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20  us flags.  EP_* 
18f70 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75  See below */.  u
18f80 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20  nion {.    char 
18f90 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  *zToken;        
18fa0 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65    /* Token value
18fb0 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65  . Zero terminate
18fc0 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a  d and dequoted *
18fd0 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65  /.    int iValue
18fe0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18ff0 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74  Non-negative int
19000 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50  eger value if EP
19010 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d  _IntValue */.  }
19020 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   u;..  /* If the
19030 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
19040 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
19050 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
19060 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
19070 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
19080 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
19090 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
190a0 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
190b0 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
190c0 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
190d0 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
190e0 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
190f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19110 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19120 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19130 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c  ***/..  Expr *pL
19140 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  eft;           /
19150 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a  * Left subnode *
19160 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74  /.  Expr *pRight
19170 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69  ;          /* Ri
19180 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  ght subnode */. 
19190 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70   union {.    Exp
191a0 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20  rList *pList;   
191b0 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58    /* op = IN, EX
191c0 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41  ISTS, SELECT, CA
191d0 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45  SE, FUNCTION, BE
191e0 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c  TWEEN */.    Sel
191f0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
19200 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63    /* EP_xIsSelec
19210 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45  t and op = IN, E
19220 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f  XISTS, SELECT */
19230 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66  .  } x;..  /* If
19240 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
19250 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
19260 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
19270 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
19280 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
19290 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
192a0 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
192b0 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
192c0 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
192d0 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
192e0 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
192f0 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
19300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19340 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49  *****/..#if SQLI
19350 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
19360 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  H>0.  int nHeigh
19370 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
19380 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72  Height of the tr
19390 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69  ee headed by thi
193a0 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  s node */.#endif
193b0 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20  .  int iTable;  
193c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
193d0 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e  COLUMN: cursor n
193e0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68  umber of table h
193f0 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20  olding column.  
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47         ** TK_REG
19420 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20  ISTER: register 
19430 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20  number.         
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19450 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31  ** TK_TRIGGER: 1
19460 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c   -> new, 0 -> ol
19470 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
19480 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50             ** EP
19490 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32  _Unlikely:  1342
194a0 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65  17728 times like
194b0 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20 20  lihood.         
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73  ** TK_SELECT: 1s
194e0 74 20 72 65 67 69 73 74 65 72 20 6f 66 20 72 65  t register of re
194f0 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20  sult vector */. 
19500 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20   ynVar iColumn; 
19510 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
19520 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64  LUMN: column ind
19530 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69  ex.  -1 for rowi
19540 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
19550 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19560 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69  K_VARIABLE: vari
19570 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77  able number (alw
19580 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20  ays >= 1)..     
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195a0 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54      ** TK_SELECT
195b0 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
195c0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 76 65  of the result ve
195d0 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69 41  ctor */.  i16 iA
195e0 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gg;             
195f0 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20   /* Which entry 
19600 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f  in pAggInfo->aCo
19610 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d  l[] or ->aFunc[]
19620 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74   */.  i16 iRight
19630 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20  JoinTable;   /* 
19640 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20  If EP_FromJoin, 
19650 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20  the right table 
19660 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20  of the join */. 
19670 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20   u8 op2;        
19680 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45          /* TK_RE
19690 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c  GISTER: original
196a0 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f   value of Expr.o
196b0 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p.              
196c0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
196d0 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c  _COLUMN: the val
196e0 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f  ue of p5 for OP_
196f0 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  Column.         
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  ** TK_AGG_FUNCTI
19720 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74  ON: nesting dept
19730 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  h */.  AggInfo *
19740 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a  pAggInfo;     /*
19750 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f   Used by TK_AGG_
19760 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47  COLUMN and TK_AG
19770 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20  G_FUNCTION */.  
19780 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 54 61 62 6c  union {.    Tabl
19790 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
197a0 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
197b0 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   Table containin
197c0 67 20 63 6f 6c 75 6d 6e 2e 20 43 61 6e 20 62 65  g column. Can be
197d0 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20   NULL.          
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e   ** for a column
19800 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20   of an index on 
19810 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  an expression */
19820 0a 20 20 20 20 57 69 6e 64 6f 77 20 2a 70 57 69  .    Window *pWi
19830 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
19840 4b 5f 46 55 4e 43 54 49 4f 4e 3a 20 57 69 6e 64  K_FUNCTION: Wind
19850 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 20 66 6f  ow definition fo
19860 72 20 74 68 65 20 66 75 6e 63 20 2a 2f 0a 20 20  r the func */.  
19870 7d 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  } y;.};../*.** T
19880 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
19890 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
198a0 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
198b0 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
198c0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
198d0 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20  mJoin  0x000001 
198e0 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e  /* Originates in
198f0 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65   ON/USING clause
19900 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a   of outer join *
19910 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
19920 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20         0x000002 
19930 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
19940 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
19950 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
19960 64 65 66 69 6e 65 20 45 50 5f 48 61 73 46 75 6e  define EP_HasFun
19970 63 20 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20  c   0x000004 /* 
19980 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
19990 6d 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  more functions o
199a0 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 23 64  f any kind */.#d
199b0 65 66 69 6e 65 20 45 50 5f 46 69 78 65 64 43 6f  efine EP_FixedCo
199c0 6c 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 54  l  0x000008 /* T
199d0 4b 5f 43 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20  K_Column with a 
199e0 6b 6e 6f 77 6e 20 66 69 78 65 64 20 76 61 6c 75  known fixed valu
199f0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
19a00 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30  Distinct  0x0000
19a10 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  10 /* Aggregate 
19a20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
19a30 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
19a40 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72  /.#define EP_Var
19a50 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20  Select 0x000020 
19a60 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f  /* pSelect is co
19a70 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f  rrelated, not co
19a80 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  nstant */.#defin
19a90 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30  e EP_DblQuoted 0
19aa0 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e  x000040 /* token
19ab0 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  .z was originall
19ac0 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64  y in "..." */.#d
19ad0 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75  efine EP_InfixFu
19ae0 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54  nc 0x000080 /* T
19af0 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78  rue for an infix
19b00 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c   function: LIKE,
19b10 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64   GLOB, etc */.#d
19b20 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65  efine EP_Collate
19b30 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54     0x000100 /* T
19b40 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
19b50 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  K_COLLATE operat
19b60 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
19b70 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30  _Generic   0x000
19b80 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f  200 /* Ignore CO
19b90 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74  LLATE or affinit
19ba0 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a  y on this tree *
19bb0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74  /.#define EP_Int
19bc0 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20  Value  0x000400 
19bd0 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
19be0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e   contained in u.
19bf0 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e  iValue */.#defin
19c00 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30  e EP_xIsSelect 0
19c10 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65  x000800 /* x.pSe
19c20 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f  lect is valid (o
19c30 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74  therwise x.pList
19c40 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20   is) */.#define 
19c50 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30  EP_Skip      0x0
19c60 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45  01000 /* COLLATE
19c70 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c  , AS, or UNLIKEL
19c80 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  Y */.#define EP_
19c90 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30  Reduced   0x0020
19ca0 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
19cb0 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  t EXPR_REDUCEDSI
19cc0 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
19cd0 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65  .#define EP_Toke
19ce0 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f  nOnly 0x004000 /
19cf0 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
19d00 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
19d10 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
19d20 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
19d30 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20      0x008000 /* 
19d40 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
19d50 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
19d60 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65   malloc() */.#de
19d70 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e  fine EP_MemToken
19d80 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65    0x010000 /* Ne
19d90 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
19da0 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
19db0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
19dc0 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30  NoReduce  0x0200
19dd0 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50  00 /* Cannot EXP
19de0 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73  RDUP_REDUCE this
19df0 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65   Expr */.#define
19e00 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78   EP_Unlikely  0x
19e10 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65  040000 /* unlike
19e20 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f  ly() or likeliho
19e30 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  od() function */
19e40 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73  .#define EP_Cons
19e50 74 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f  tFunc 0x080000 /
19e60 2a 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  * A SQLITE_FUNC_
19e70 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f  CONSTANT or _SLO
19e80 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  CHNG function */
19e90 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42  .#define EP_CanB
19ea0 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f  eNull 0x100000 /
19eb0 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65  * Can be null de
19ec0 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63  spite NOT NULL c
19ed0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
19ee0 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79  fine EP_Subquery
19ef0 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72    0x200000 /* Tr
19f00 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
19f10 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72  _SELECT operator
19f20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
19f30 6c 69 61 73 20 20 20 20 20 30 78 34 30 30 30 30  lias     0x40000
19f40 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73  0 /* Is an alias
19f50 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65   for a result se
19f60 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  t column */.#def
19f70 69 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20  ine EP_Leaf     
19f80 20 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70   0x800000 /* Exp
19f90 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74  r.pLeft, .pRight
19fa0 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c  , .u.pSelect all
19fb0 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
19fc0 20 45 50 5f 57 69 6e 46 75 6e 63 20 20 30 78 31   EP_WinFunc  0x1
19fd0 30 30 30 30 30 30 20 2f 2a 20 54 4b 5f 46 55 4e  000000 /* TK_FUN
19fe0 43 54 49 4f 4e 20 77 69 74 68 20 45 78 70 72 2e  CTION with Expr.
19ff0 79 2e 70 57 69 6e 20 73 65 74 20 2a 2f 0a 0a 2f  y.pWin set */../
1a000 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f 70  *.** The EP_Prop
1a010 61 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61 20  agate mask is a 
1a020 73 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69 65  set of propertie
1a030 73 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69 63  s that automatic
1a040 61 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a 2a  ally propagate.*
1a050 2a 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20 70  * upwards into p
1a060 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a  arent nodes..*/.
1a070 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61  #define EP_Propa
1a080 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65  gate (EP_Collate
1a090 7c 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50 5f  |EP_Subquery|EP_
1a0a0 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  HasFunc)../*.** 
1a0b0 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
1a0c0 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
1a0d0 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
1a0e0 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45  bits in the.** E
1a0f0 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
1a100 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72  .*/.#define Expr
1a110 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29  HasProperty(E,P)
1a120 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67       (((E)->flag
1a130 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
1a140 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f  ne ExprHasAllPro
1a150 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
1a160 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  )->flags&(P))==(
1a170 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  P)).#define Expr
1a180 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29  SetProperty(E,P)
1a190 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c       (E)->flags|
1a1a0 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70  =(P).#define Exp
1a1b0 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45  rClearProperty(E
1a1c0 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  ,P)   (E)->flags
1a1d0 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45  &=~(P)../* The E
1a1e0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
1a1f0 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65  y() macro is use
1a200 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69  d for Verificati
1a210 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a  on, Validation,.
1a220 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  ** and Accredita
1a230 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77  tion only.  It w
1a240 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65  orks like ExprSe
1a250 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69  tProperty() duri
1a260 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73  ng VVA.** proces
1a270 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d  ses but is a no-
1a280 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e  op for delivery.
1a290 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
1a2a0 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65  E_DEBUG.# define
1a2b0 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
1a2c0 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66  rty(E,P)  (E)->f
1a2d0 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a  lags|=(P).#else.
1a2e0 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
1a2f0 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
1a300 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
1a310 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
1a320 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ne the number of
1a330 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20   bytes required 
1a340 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72  by a normal Expr
1a350 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45  .** struct, an E
1a360 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
1a370 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
1a380 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e  lag set in Expr.
1a390 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20  flags.** and an 
1a3a0 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
1a3b0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
1a3c0 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23  y flag set..*/.#
1a3d0 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c  define EXPR_FULL
1a3e0 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73  SIZE           s
1a3f0 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20  izeof(Expr)     
1a400 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69        /* Full si
1a410 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  ze */.#define EX
1a420 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20  PR_REDUCEDSIZE  
1a430 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
1a440 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20  xpr,iTable)  /* 
1a450 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20  Common features 
1a460 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
1a470 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20  TOKENONLYSIZE   
1a480 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
1a490 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77  ,pLeft)   /* Few
1a4a0 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a  er features */..
1a4b0 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73  /*.** Flags pass
1a4c0 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ed to the sqlite
1a4d0 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74  3ExprDup() funct
1a4e0 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61  ion. See the hea
1a4f0 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61  der comment.** a
1a500 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
1a510 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
1a520 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
1a530 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
1a540 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
1a550 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
1a560 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
1a570 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
1a580 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
1a590 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
1a5a0 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
1a5b0 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
1a5c0 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
1a5d0 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
1a5e0 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
1a5f0 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
1a600 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
1a610 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
1a620 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
1a630 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
1a640 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
1a650 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
1a660 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
1a670 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
1a680 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
1a690 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
1a6a0 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
1a6b0 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
1a6c0 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
1a6d0 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
1a6e0 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
1a6f0 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
1a700 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
1a710 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
1a720 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
1a730 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
1a740 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
1a750 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
1a760 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
1a770 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
1a780 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
1a790 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
1a7a0 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
1a7b0 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
1a7c0 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
1a7d0 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
1a7e0 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
1a7f0 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
1a800 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
1a810 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
1a820 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
1a830 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
1a840 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
1a850 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
1a860 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
1a870 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
1a880 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
1a890 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
1a8a0 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
1a8b0 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
1a8c0 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
1a8d0 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
1a8e0 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
1a8f0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
1a900 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
1a910 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
1a920 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63   list */.  struc
1a930 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
1a940 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
1a950 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
1a960 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
1a970 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
1a980 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
1a990 20 74 72 65 65 20 66 6f 72 20 74 68 69 73 20 65   tree for this e
1a9a0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
1a9b0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1a9c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
1a9d0 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
1a9e0 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
1a9f0 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
1aa00 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
1aa10 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
1aa20 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
1aa30 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
1aa40 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
1aa50 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
1aa60 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
1aa70 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
1aa80 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
1aa90 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
1aaa0 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
1aab0 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
1aac0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
1aad0 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
1aae0 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
1aaf0 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
1ab00 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
1ab10 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
1ab20 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
1ab30 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
1ab40 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
1ab50 53 6f 72 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a  SorterRef :1; /*
1ab60 20 44 65 66 65 72 20 65 76 61 6c 75 61 74 69 6f   Defer evaluatio
1ab70 6e 20 75 6e 74 69 6c 20 61 66 74 65 72 20 73 6f  n until after so
1ab80 72 74 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 69  rting */.    uni
1ab90 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63  on {.      struc
1aba0 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20  t {.        u16 
1abb0 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20  iOrderByCol;    
1abc0 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42    /* For ORDER B
1abd0 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  Y, column number
1abe0 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a   in result set *
1abf0 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41  /.        u16 iA
1ac00 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
1ac10 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61  /* Index into Pa
1ac20 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72  rse.aAlias[] for
1ac30 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20   zName */.      
1ac40 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69  } x;.      int i
1ac50 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20  ConstExprReg;   
1ac60 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69     /* Register i
1ac70 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c  n which Expr val
1ac80 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a  ue is cached */.
1ac90 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31      } u;.  } a[1
1aca0 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
1acb0 20 20 20 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20      /* One slot 
1acc0 66 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  for each express
1acd0 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
1ace0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1acf0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
1ad00 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68   structure can h
1ad10 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73  old a simple lis
1ad20 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  t of identifiers
1ad30 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65  ,.** such as the
1ad40 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e   list "a,b,c" in
1ad50 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1ad60 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a  tatements:.**.**
1ad70 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
1ad80 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45  O t(a,b,c) VALUE
1ad90 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43  S ...;.**      C
1ada0 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20  REATE INDEX idx 
1adb0 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20  ON t(a,b,c);.** 
1adc0 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47       CREATE TRIG
1add0 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20  GER trig BEFORE 
1ade0 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c  UPDATE ON t(a,b,
1adf0 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68  c) ...;.**.** Th
1ae00 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66  e IdList.a.idx f
1ae10 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65  ield is used whe
1ae20 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70  n the IdList rep
1ae30 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74  resents the list
1ae40 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61   of.** column na
1ae50 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c  mes after a tabl
1ae60 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53  e name in an INS
1ae70 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ERT statement.  
1ae80 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  In the statement
1ae90 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52  .**.**     INSER
1aea0 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
1aeb0 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22  ....**.** If "a"
1aec0 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c   is the k-th col
1aed0 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22  umn of table "t"
1aee0 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b  , then IdList.a[
1aef0 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74  0].idx==k..*/.st
1af00 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20  ruct IdList {.  
1af10 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74  struct IdList_it
1af20 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  em {.    char *z
1af30 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
1af40 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69  me of the identi
1af50 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  fier */.    int 
1af60 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  idx;          /*
1af70 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54   Index in some T
1af80 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61  able.aCol[] of a
1af90 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e   column named zN
1afa0 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20  ame */.  } *a;. 
1afb0 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20   int nId;       
1afc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69    /* Number of i
1afd0 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68  dentifiers on th
1afe0 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
1aff0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1b000 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  g structure desc
1b010 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63  ribes the FROM c
1b020 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
1b030 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  T statement..** 
1b040 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75  Each table or su
1b050 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
1b060 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73  OM clause is a s
1b070 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20  eparate element 
1b080 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73  of.** the SrcLis
1b090 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a  t.a[] array..**.
1b0a0 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69  ** With the addi
1b0b0 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  tion of multiple
1b0c0 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72   database suppor
1b0d0 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  t, the following
1b0e0 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61   structure.** ca
1b0f0 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
1b100 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72  o describe a par
1b110 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75  ticular table su
1b120 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  ch as the table 
1b130 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66  that.** is modif
1b140 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54  ied by an INSERT
1b150 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44  , DELETE, or UPD
1b160 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ATE statement.  
1b170 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c  In standard SQL,
1b180 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65  .** such a table
1b190 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
1b1a0 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74  e name: ID.  But
1b1b0 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20   in SQLite, the 
1b1c0 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77  table can.** now
1b1d0 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62   be identified b
1b1e0 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  y a database nam
1b1f0 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74  e, a dot, then t
1b200 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49  he table name: I
1b210 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  D.ID..**.** The 
1b220 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20  jointype starts 
1b230 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20  out showing the 
1b240 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65  join type betwee
1b250 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  n the current ta
1b260 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e  ble.** and the n
1b270 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65  ext table on the
1b280 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73   list.  The pars
1b290 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69  er builds the li
1b2a0 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20  st this way..** 
1b2b0 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69  But sqlite3SrcLi
1b2c0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
1b2d0 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74  ) later shifts t
1b2e0 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20  he jointypes so 
1b2f0 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69  that each.** joi
1b300 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20  ntype expresses 
1b310 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e  the join between
1b320 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74   the table and t
1b330 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c  he previous tabl
1b340 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  e..**.** In the 
1b350 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74  colUsed field, t
1b360 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
1b370 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65  t (bit 63) is se
1b380 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a  t if the table.*
1b390 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20  * contains more 
1b3a0 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20  than 63 columns 
1b3b0 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72  and the 64-th or
1b3c0 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73   later column is
1b3d0 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
1b3e0 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74   SrcList {.  int
1b3f0 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a   nSrc;        /*
1b400 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
1b410 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
1b420 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
1b430 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c  se */.  u32 nAll
1b440 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  oc;      /* Numb
1b450 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c  er of entries al
1b460 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62  located in a[] b
1b470 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74  elow */.  struct
1b480 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a   SrcList_item {.
1b490 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68      Schema *pSch
1b4a0 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20  ema;  /* Schema 
1b4b0 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74  to which this it
1b4c0 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20  em is fixed */. 
1b4d0 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61     char *zDataba
1b4e0 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  se;  /* Name of 
1b4f0 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1b500 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
1b510 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1b520 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1b530 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  the table */.   
1b540 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20   char *zAlias;  
1b550 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61     /* The "B" pa
1b560 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22  rt of a "A AS B"
1b570 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20   phrase.  zName 
1b580 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20  is the "A" */.  
1b590 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
1b5a0 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61      /* An SQL ta
1b5b0 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
1b5c0 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  g to zName */.  
1b5d0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1b5e0 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20  t;  /* A SELECT 
1b5f0 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69  statement used i
1b600 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
1b610 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  le name */.    i
1b620 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20  nt addrFillSub; 
1b630 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73   /* Address of s
1b640 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e  ubroutine to man
1b650 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79  ifest a subquery
1b660 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
1b670 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67  eturn;    /* Reg
1b680 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65  ister holding re
1b690 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20  turn address of 
1b6a0 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20  addrFillSub */. 
1b6b0 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74     int regResult
1b6c0 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
1b6d0 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74  s holding result
1b6e0 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e  s of a co-routin
1b6f0 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
1b700 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74  {.      u8 joint
1b710 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70  ype;      /* Typ
1b720 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65  e of join betwee
1b730 6e 20 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64  n this table and
1b740 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
1b750 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1b760 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20  notIndexed :1;  
1b770 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1b780 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45  re is a NOT INDE
1b790 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  XED clause */.  
1b7a0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49      unsigned isI
1b7b0 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f  ndexedBy :1;   /
1b7c0 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1b7d0 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59  is an INDEXED BY
1b7e0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1b7f0 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46   unsigned isTabF
1b800 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54  unc :1;     /* T
1b810 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c  rue if table-val
1b820 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e  ued-function syn
1b830 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  tax */.      uns
1b840 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
1b850 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
1b860 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
1b870 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
1b880 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
1b890 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
1b8a0 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
1b8b0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
1b8c0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1b8d0 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20  isRecursive :1; 
1b8e0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65    /* True for re
1b8f0 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63  cursive referenc
1b900 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20  e in WITH */.   
1b910 20 7d 20 66 67 3b 0a 20 20 20 20 69 6e 74 20 69   } fg;.    int i
1b920 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
1b930 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
1b940 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
1b950 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
1b960 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
1b970 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
1b980 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
1b990 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
1b9a0 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
1b9b0 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
1b9c0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
1b9d0 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
1b9e0 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
1b9f0 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
1ba00 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
1ba10 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  used */.    unio
1ba20 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  n {.      char *
1ba30 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f  zIndexedBy;    /
1ba40 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
1ba50 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
1ba60 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
1ba70 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74  /.      ExprList
1ba80 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20   *pFuncArg;  /* 
1ba90 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62  Arguments to tab
1baa0 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
1bab0 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a  on */.    } u1;.
1bac0 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e      Index *pIBIn
1bad0 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73  dex;  /* Index s
1bae0 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
1baf0 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e  onding to u1.zIn
1bb00 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61  dexedBy */.  } a
1bb10 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
1bb20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
1bb30 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
1bb40 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
1bb50 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
1bb60 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
1bb70 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
1bb80 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
1bb90 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
1bba0 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
1bbb0 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
1bbc0 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
1bbd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
1bbe0 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
1bbf0 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
1bc00 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
1bc10 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
1bc20 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
1bc30 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
1bc40 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
1bc50 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
1bc60 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
1bc70 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
1bc80 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
1bc90 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
1bca0 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
1bcb0 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
1bcc0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1bcd0 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
1bce0 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
1bcf0 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
1bd00 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
1bd10 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
1bd20 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
1bd30 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
1bd40 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
1bd50 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
1bd60 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
1bd70 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
1bd80 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
1bd90 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
1bda0 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
1bdb0 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
1bdc0 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ber..**.** Value
1bdd0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
1bde0 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
1bdf0 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45  t()):.**     WHE
1be00 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d  RE_USE_LIMIT  ==
1be10 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a   SF_FixedLimit.*
1be20 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1be30 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20  ORDERBY_NORMAL  
1be40 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70   0x0000 /* No-op
1be50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1be60 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20  E_ORDERBY_MIN   
1be70 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44     0x0001 /* ORD
1be80 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1be90 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20   for min() func 
1bea0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1beb0 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20  _ORDERBY_MAX    
1bec0 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45    0x0002 /* ORDE
1bed0 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1bee0 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a  for max() func *
1bef0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1bf00 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20  ONEPASS_DESIRED 
1bf10 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20   0x0004 /* Want 
1bf20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55  to do one-pass U
1bf30 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a  PDATE/DELETE */.
1bf40 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
1bf50 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30  EPASS_MULTIROW 0
1bf60 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53  x0008 /* ONEPASS
1bf70 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74   is ok with mult
1bf80 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1bf90 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
1bfa0 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
1bfb0 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  10 /* Ok to retu
1bfc0 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
1bfd0 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
1bfe0 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43  ne WHERE_OR_SUBC
1bff0 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30  LAUSE     0x0020
1c000 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61   /* Processing a
1c010 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61   sub-WHERE as pa
1c020 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20  rt of.          
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c040 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
1c050 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69  he OR optimizati
1c060 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  on  */.#define W
1c070 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20  HERE_GROUPBY    
1c080 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20        0x0040 /* 
1c090 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c  pOrderBy is real
1c0a0 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  ly a GROUP BY */
1c0b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1c0c0 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20  ISTINCTBY       
1c0d0 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72  0x0080 /* pOrder
1c0e0 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44  by is really a D
1c0f0 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a  ISTINCT clause *
1c100 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c110 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20  WANT_DISTINCT   
1c120 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f   0x0100 /* All o
1c130 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62  utput needs to b
1c140 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64  e distinct */.#d
1c150 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54  efine WHERE_SORT
1c160 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30  BYGROUP      0x0
1c170 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73  200 /* Support s
1c180 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
1c190 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ted() */.#define
1c1a0 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c   WHERE_SEEK_TABL
1c1b0 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f  E       0x0400 /
1c1c0 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73  * Do not defer s
1c1d0 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62  eeks on main tab
1c1e0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  le */.#define WH
1c1f0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49  ERE_ORDERBY_LIMI
1c200 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f  T    0x0800 /* O
1c210 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20  RDERBY+LIMIT on 
1c220 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a  the inner loop *
1c230 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c240 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20  SEEK_UNIQ_TABLE 
1c250 20 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f   0x1000 /* Do no
1c260 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 69 66  t defer seeks if
1c270 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20   unique */.     
1c280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c290 20 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30     /*     0x2000
1c2a0 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c      not currentl
1c2b0 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  y used */.#defin
1c2c0 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49  e WHERE_USE_LIMI
1c2d0 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30 20  T        0x4000 
1c2e0 2f 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54  /* Use the LIMIT
1c2f0 20 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74   in cost estimat
1c300 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  es */.          
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c320 20 20 20 20 20 30 78 38 30 30 30 20 20 20 20 6e       0x8000    n
1c330 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1c340 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  d */../* Allowed
1c350 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
1c360 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
1c370 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
1c380 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1c390 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
1c3a0 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
1c3b0 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
1c3c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c3d0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
1c3e0 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
1c3f0 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
1c400 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1c410 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
1c420 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
1c430 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
1c440 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c450 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
1c460 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
1c470 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
1c480 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
1c490 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
1c4a0 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
1c4b0 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
1c4c0 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
1c4d0 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
1c4e0 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
1c4f0 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
1c500 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
1c510 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
1c520 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
1c530 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
1c540 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
1c550 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
1c560 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
1c570 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
1c580 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
1c590 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
1c5a0 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
1c5b0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
1c5c0 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
1c5d0 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
1c5e0 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
1c5f0 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
1c600 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
1c610 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
1c620 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
1c630 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
1c640 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
1c650 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
1c660 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
1c670 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
1c680 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a  the inner-most.*
1c690 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
1c6a0 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
1c6b0 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
1c6c0 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
1c6d0 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
1c6e0 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
1c6f0 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
1c700 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
1c710 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
1c720 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
1c730 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
1c740 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
1c750 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
1c760 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
1c770 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
1c780 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
1c790 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
1c7a0 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
1c7b0 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
1c7c0 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
1c7d0 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
1c7e0 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
1c7f0 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
1c800 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
1c810 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
1c820 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
1c830 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
1c840 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
1c850 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
1c860 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
1c870 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
1c880 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
1c890 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
1c8a0 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
1c8b0 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
1c8c0 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
1c8d0 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
1c8e0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
1c8f0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1c900 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
1c910 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
1c920 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
1c930 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
1c940 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
1c950 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e  ve names */.  un
1c960 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
1c970 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
1c980 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
1c990 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f  of result-set co
1c9a0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67  lumns */.    Agg
1c9b0 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
1c9c0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1c9d0 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65   about aggregate
1c9e0 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20  s at this level 
1c9f0 2a 2f 0a 20 20 20 20 55 70 73 65 72 74 20 2a 70  */.    Upsert *p
1ca00 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f  Upsert;     /* O
1ca10 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1ca20 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  e information fr
1ca30 6f 6d 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a  om an upsert */.
1ca40 20 20 7d 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43    } uNC;.  NameC
1ca50 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20  ontext *pNext;  
1ca60 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61  /* Next outer na
1ca70 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c  me context.  NUL
1ca80 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20  L for outermost 
1ca90 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
1caa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1cab0 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73  ber of names res
1cac0 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f  olved by this co
1cad0 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  ntext */.  int n
1cae0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1caf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1cb00 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ors encountered 
1cb10 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20  while resolving 
1cb20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  names */.  u16 n
1cb30 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  cFlags;         
1cb40 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
1cb50 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  NC_* flags defin
1cb60 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 53 65  ed below */.  Se
1cb70 6c 65 63 74 20 2a 70 57 69 6e 53 65 6c 65 63 74  lect *pWinSelect
1cb80 3b 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61  ;  /* SELECT sta
1cb90 74 65 6d 65 6e 74 20 66 6f 72 20 61 6e 79 20 77  tement for any w
1cba0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
1cbb0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
1cbc0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
1cbd0 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
1cbe0 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
1cbf0 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1cc00 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65  traints (all che
1cc10 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28  cked via assert(
1cc20 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73  )):.**    NC_Has
1cc30 41 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73  Agg    == SF_Has
1cc40 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e  Agg.**    NC_Min
1cc50 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e  MaxAgg == SF_Min
1cc60 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54 45  MaxAgg == SQLITE
1cc70 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a  _FUNC_MINMAX.**.
1cc80 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
1cc90 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20  lowAgg  0x0001  
1cca0 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
1ccb0 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
1ccc0 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
1ccd0 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
1cce0 30 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20  0x0002  /* True 
1ccf0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
1cd00 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
1cd10 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
1cd20 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30  _IsCheck   0x000
1cd30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  4  /* True if re
1cd40 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
1cd50 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
1cd60 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  int */.#define N
1cd70 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30  C_InAggFunc 0x00
1cd80 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61  08  /* True if a
1cd90 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e  nalyzing argumen
1cda0 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e  ts to an agg fun
1cdb0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  c */.#define NC_
1cdc0 48 61 73 41 67 67 20 20 20 20 30 78 30 30 31 30  HasAgg    0x0010
1cdd0 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
1cde0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1cdf0 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
1ce00 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20  fine NC_IdxExpr 
1ce10 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75    0x0020  /* Tru
1ce20 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63  e if resolving c
1ce30 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45  olumns of CREATE
1ce40 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
1ce50 65 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30  e NC_VarSelect 0
1ce60 78 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72  x0040  /* A corr
1ce70 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
1ce80 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
1ce90 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 45 4c 69  .#define NC_UELi
1cea0 73 74 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a  st    0x0080  /*
1ceb0 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 45 4c   True if uNC.pEL
1cec0 69 73 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23  ist is used */.#
1ced0 64 65 66 69 6e 65 20 4e 43 5f 55 41 67 67 49 6e  define NC_UAggIn
1cee0 66 6f 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54  fo  0x0100  /* T
1cef0 72 75 65 20 69 66 20 75 4e 43 2e 70 41 67 67 49  rue if uNC.pAggI
1cf00 6e 66 6f 20 69 73 20 75 73 65 64 20 2a 2f 0a 23  nfo is used */.#
1cf10 64 65 66 69 6e 65 20 4e 43 5f 55 55 70 73 65 72  define NC_UUpser
1cf20 74 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 54  t   0x0200  /* T
1cf30 72 75 65 20 69 66 20 75 4e 43 2e 70 55 70 73 65  rue if uNC.pUpse
1cf40 72 74 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64  rt is used */.#d
1cf50 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41  efine NC_MinMaxA
1cf60 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69  gg 0x1000  /* mi
1cf70 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73  n/max aggregates
1cf80 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65   seen.  See note
1cf90 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
1cfa0 65 20 4e 43 5f 43 6f 6d 70 6c 65 78 20 20 20 30  e NC_Complex   0
1cfb0 78 32 30 30 30 20 20 2f 2a 20 54 72 75 65 20 69  x2000  /* True i
1cfc0 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20  f a function or 
1cfd0 73 75 62 71 75 65 72 79 20 73 65 65 6e 20 2a 2f  subquery seen */
1cfe0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
1cff0 77 57 69 6e 20 20 30 78 34 30 30 30 20 20 2f 2a  wWin  0x4000  /*
1d000 20 57 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   Window function
1d010 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65  s are allowed he
1d020 72 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  re */../*.** An 
1d030 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1d040 66 6f 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65 63 74  following object
1d050 20 64 65 73 63 72 69 62 65 73 20 61 20 73 69 6e   describes a sin
1d060 67 6c 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a  gle ON CONFLICT.
1d070 2a 2a 20 63 6c 61 75 73 65 20 69 6e 20 61 6e 20  ** clause in an 
1d080 75 70 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  upsert..**.** Th
1d090 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74 20  e pUpsertTarget 
1d0a0 66 69 65 6c 64 20 69 73 20 6f 6e 6c 79 20 73 65  field is only se
1d0b0 74 20 69 66 20 74 68 65 20 4f 4e 20 43 4f 4e 46  t if the ON CONF
1d0c0 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e 63 6c  LICT clause incl
1d0d0 75 64 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74  udes.** conflict
1d0e0 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e 20  -target clause. 
1d0f0 20 28 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49 43   (In "ON CONFLIC
1d100 54 28 61 2c 62 29 22 20 74 68 65 20 22 28 61 2c  T(a,b)" the "(a,
1d110 62 29 22 20 69 73 20 74 68 65 0a 2a 2a 20 63 6f  b)" is the.** co
1d120 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c  nflict-target cl
1d130 61 75 73 65 2e 29 20 20 54 68 65 20 70 55 70 73  ause.)  The pUps
1d140 65 72 74 54 61 72 67 65 74 57 68 65 72 65 20 69  ertTargetWhere i
1d150 73 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a  s the optional.*
1d160 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 75  * WHERE clause u
1d170 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20  sed to identify 
1d180 70 61 72 74 69 61 6c 20 75 6e 69 71 75 65 20 69  partial unique i
1d190 6e 64 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55  ndexes..**.** pU
1d1a0 70 73 65 72 74 53 65 74 20 69 73 20 74 68 65 20  psertSet is the 
1d1b0 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65  list of column=e
1d1c0 78 70 72 20 74 65 72 6d 73 20 6f 66 20 74 68 65  xpr terms of the
1d1d0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1d1e0 74 2e 20 0a 2a 2a 20 54 68 65 20 70 55 70 73 65  t. .** The pUpse
1d1f0 72 74 53 65 74 20 66 69 65 6c 64 20 69 73 20 4e  rtSet field is N
1d200 55 4c 4c 20 66 6f 72 20 61 20 4f 4e 20 43 4f 4e  ULL for a ON CON
1d210 46 4c 49 43 54 20 44 4f 20 4e 4f 54 48 49 4e 47  FLICT DO NOTHING
1d220 2e 20 20 54 68 65 0a 2a 2a 20 70 55 70 73 65 72  .  The.** pUpser
1d230 74 57 68 65 72 65 20 69 73 20 74 68 65 20 57 48  tWhere is the WH
1d240 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74  ERE clause for t
1d250 68 65 20 55 50 44 41 54 45 20 61 6e 64 20 69 73  he UPDATE and is
1d260 20 4e 55 4c 4c 20 69 66 20 74 68 65 0a 2a 2a 20   NULL if the.** 
1d270 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20  WHERE clause is 
1d280 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 72 75  omitted..*/.stru
1d290 63 74 20 55 70 73 65 72 74 20 7b 0a 20 20 45 78  ct Upsert {.  Ex
1d2a0 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74 54  prList *pUpsertT
1d2b0 61 72 67 65 74 3b 20 20 2f 2a 20 4f 70 74 69 6f  arget;  /* Optio
1d2c0 6e 61 6c 20 64 65 73 63 72 69 70 74 69 6f 6e 20  nal description 
1d2d0 6f 66 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69  of conflicting i
1d2e0 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ndex */.  Expr *
1d2f0 70 55 70 73 65 72 74 54 61 72 67 65 74 57 68 65  pUpsertTargetWhe
1d300 72 65 3b 20 2f 2a 20 57 48 45 52 45 20 63 6c 61  re; /* WHERE cla
1d310 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
1d320 69 6e 64 65 78 20 74 61 72 67 65 74 73 20 2a 2f  index targets */
1d330 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70  .  ExprList *pUp
1d340 73 65 72 74 53 65 74 3b 20 20 20 20 20 2f 2a 20  sertSet;     /* 
1d350 54 68 65 20 53 45 54 20 63 6c 61 75 73 65 20 66  The SET clause f
1d360 72 6f 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49  rom an ON CONFLI
1d370 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 45  CT UPDATE */.  E
1d380 78 70 72 20 2a 70 55 70 73 65 72 74 57 68 65 72  xpr *pUpsertWher
1d390 65 3b 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52  e;       /* WHER
1d3a0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65  E clause for the
1d3b0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44   ON CONFLICT UPD
1d3c0 41 54 45 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  ATE */.  /* The 
1d3d0 66 69 65 6c 64 73 20 61 62 6f 76 65 20 63 6f 6d  fields above com
1d3e0 70 72 69 73 65 20 74 68 65 20 70 61 72 73 65 20  prise the parse 
1d3f0 74 72 65 65 20 66 6f 72 20 74 68 65 20 75 70 73  tree for the ups
1d400 65 72 74 20 63 6c 61 75 73 65 2e 0a 20 20 2a 2a  ert clause..  **
1d410 20 54 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   The fields belo
1d420 77 20 61 72 65 20 75 73 65 64 20 74 6f 20 74 72  w are used to tr
1d430 61 6e 73 66 65 72 20 69 6e 66 6f 72 6d 61 74 69  ansfer informati
1d440 6f 6e 20 66 72 6f 6d 20 74 68 65 20 49 4e 53 45  on from the INSE
1d450 52 54 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 69  RT.  ** processi
1d460 6e 67 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68 65  ng down into the
1d470 20 55 50 44 41 54 45 20 70 72 6f 63 65 73 73 69   UPDATE processi
1d480 6e 67 20 77 68 69 6c 65 20 67 65 6e 65 72 61 74  ng while generat
1d490 69 6e 67 20 63 6f 64 65 2e 0a 20 20 2a 2a 20 55  ing code..  ** U
1d4a0 70 73 65 72 74 20 6f 77 6e 73 20 74 68 65 20 6d  psert owns the m
1d4b0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64 20  emory allocated 
1d4c0 61 62 6f 76 65 2c 20 62 75 74 20 6e 6f 74 20 74  above, but not t
1d4d0 68 65 20 6d 65 6d 6f 72 79 20 62 65 6c 6f 77 2e  he memory below.
1d4e0 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 55 70   */.  Index *pUp
1d4f0 73 65 72 74 49 64 78 3b 20 20 20 20 20 20 20 20  sertIdx;        
1d500 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 74 68  /* Constraint th
1d510 61 74 20 70 55 70 73 65 72 74 54 61 72 67 65 74  at pUpsertTarget
1d520 20 69 64 65 6e 74 69 66 69 65 73 20 2a 2f 0a 20   identifies */. 
1d530 20 53 72 63 4c 69 73 74 20 2a 70 55 70 73 65 72   SrcList *pUpser
1d540 74 53 72 63 3b 20 20 20 20 20 20 2f 2a 20 54 61  tSrc;      /* Ta
1d550 62 6c 65 20 74 6f 20 62 65 20 75 70 64 61 74 65  ble to be update
1d560 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 44 61  d */.  int regDa
1d570 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ta;             
1d580 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74   /* First regist
1d590 65 72 20 68 6f 6c 64 69 6e 67 20 61 72 72 61 79  er holding array
1d5a0 20 6f 66 20 56 41 4c 55 45 53 20 2a 2f 0a 20 20   of VALUES */.  
1d5b0 69 6e 74 20 69 44 61 74 61 43 75 72 3b 20 20 20  int iDataCur;   
1d5c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1d5d0 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 20 63  ex of the data c
1d5e0 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 69  ursor */.  int i
1d5f0 49 64 78 43 75 72 3b 20 20 20 20 20 20 20 20 20  IdxCur;         
1d600 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1d610 20 74 68 65 20 66 69 72 73 74 20 69 6e 64 65 78   the first index
1d620 20 63 75 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f   cursor */.};../
1d630 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1d640 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1d650 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
1d660 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
1d670 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
1d680 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
1d690 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
1d6a0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
1d6b0 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 68 65 61  *.** See the hea
1d6c0 64 65 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74  der comment on t
1d6d0 68 65 20 63 6f 6d 70 75 74 65 4c 69 6d 69 74 52  he computeLimitR
1d6e0 65 67 69 73 74 65 72 73 28 29 20 72 6f 75 74 69  egisters() routi
1d6f0 6e 65 20 66 6f 72 20 61 0a 2a 2a 20 64 65 74 61  ne for a.** deta
1d700 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e  iled description
1d710 20 6f 66 20 74 68 65 20 6d 65 61 6e 69 6e 67 20   of the meaning 
1d720 6f 66 20 74 68 65 20 69 4c 69 6d 69 74 20 61 6e  of the iLimit an
1d730 64 20 69 4f 66 66 73 65 74 20 66 69 65 6c 64 73  d iOffset fields
1d740 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e  ..**.** addrOpen
1d750 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63  Ephm[] entries c
1d760 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65  ontain the addre
1d770 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68  ss of OP_OpenEph
1d780 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a  emeral opcodes..
1d790 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73  ** These address
1d7a0 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65  es must be store
1d7b0 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e  d so that we can
1d7c0 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c   go back and fil
1d7d0 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b  l in.** the P4_K
1d7e0 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61  EYINFO and P2 pa
1d7f0 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20  rameters later. 
1d800 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79   Neither the Key
1d810 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20  Info nor.** the 
1d820 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1d830 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63  s in P2 can be c
1d840 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73  omputed at the s
1d850 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74  ame time.** as t
1d860 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69  he OP_OpenEphm i
1d870 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f  nstruction is co
1d880 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a  ded because not.
1d890 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d  ** enough inform
1d8a0 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
1d8b0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69  compound query i
1d8c0 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20  s known at that 
1d8d0 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65  point..** The Ke
1d8e0 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
1d8f0 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31  enTran[0] and [1
1d900 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
1d910 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a  ting sequences.*
1d920 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  * for the result
1d930 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e   set.  The KeyIn
1d940 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45  fo for addrOpenE
1d950 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20  phm[2] contains 
1d960 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71  collating.** seq
1d970 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f  uences for the O
1d980 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1d990 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
1d9a0 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
1d9b0 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54  EList;      /* T
1d9c0 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
1d9d0 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20   result */.  u8 
1d9e0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
1d9f0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54      /* One of: T
1da00 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54  K_UNION TK_ALL T
1da10 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45  K_INTERSECT TK_E
1da20 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73  XCEPT */.  LogEs
1da30 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20  t nSelectRow;   
1da40 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
1da50 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20  umber of result 
1da60 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65  rows */.  u32 se
1da70 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
1da80 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
1da90 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
1daa0 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
1dab0 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
1dac0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
1dad0 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
1dae0 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33 32  ounters */.  u32
1daf0 20 73 65 6c 49 64 3b 20 20 20 20 20 20 20 20 20   selId;         
1db00 20 20 20 20 2f 2a 20 55 6e 69 71 75 65 20 69 64      /* Unique id
1db10 65 6e 74 69 66 69 65 72 20 6e 75 6d 62 65 72 20  entifier number 
1db20 66 6f 72 20 74 68 69 73 20 53 45 4c 45 43 54 20  for this SELECT 
1db30 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65  */.  int addrOpe
1db40 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f  nEphm[2];   /* O
1db50 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f  P_OpenEphem opco
1db60 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74  des related to t
1db70 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20  his select */.  
1db80 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20  SrcList *pSrc;  
1db90 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52         /* The FR
1dba0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  OM clause */.  E
1dbb0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1dbc0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1dbd0 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  RE clause */.  E
1dbe0 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
1dbf0 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f  y;    /* The GRO
1dc00 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
1dc10 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b    Expr *pHaving;
1dc20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1dc30 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f  HAVING clause */
1dc40 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1dc50 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  derBy;    /* The
1dc60 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1dc70 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50   */.  Select *pP
1dc80 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20  rior;        /* 
1dc90 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20  Prior select in 
1dca0 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63  a compound selec
1dcb0 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  t statement */. 
1dcc0 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20   Select *pNext; 
1dcd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1dce0 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65  select to the le
1dcf0 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ft in a compound
1dd00 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d   */.  Expr *pLim
1dd10 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  it;          /* 
1dd20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
1dd30 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
1dd40 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68   used. */.  With
1dd50 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
1dd60 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73     /* WITH claus
1dd70 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  e attached to th
1dd80 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55  is select. Or NU
1dd90 4c 4c 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  LL. */.#ifndef S
1dda0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
1ddb0 57 46 55 4e 43 0a 20 20 57 69 6e 64 6f 77 20 2a  WFUNC.  Window *
1ddc0 70 57 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  pWin;          /
1ddd0 2a 20 4c 69 73 74 20 6f 66 20 77 69 6e 64 6f 77  * List of window
1dde0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
1ddf0 57 69 6e 64 6f 77 20 2a 70 57 69 6e 44 65 66 6e  Window *pWinDefn
1de00 3b 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ;      /* List o
1de10 66 20 6e 61 6d 65 64 20 77 69 6e 64 6f 77 20 64  f named window d
1de20 65 66 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a 23 65  efinitions */.#e
1de30 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
1de40 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
1de50 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
1de60 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
1de70 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
1de80 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
1de90 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1dea0 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68  straints (all ch
1deb0 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74  ecked via assert
1dec0 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61  ()).**     SF_Ha
1ded0 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48  sAgg     == NC_H
1dee0 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f  asAgg.**     SF_
1def0 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43  MinMaxAgg  == NC
1df00 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d  _MinMaxAgg     =
1df10 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  = SQLITE_FUNC_MI
1df20 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46  NMAX.**     SF_F
1df30 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45  ixedLimit == WHE
1df40 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a  RE_USE_LIMIT.*/.
1df50 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
1df60 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30 30  nct       0x0000
1df70 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
1df80 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
1df90 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c  */.#define SF_Al
1dfa0 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30  l            0x0
1dfb0 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65  0002  /* Include
1dfc0 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72  s the ALL keywor
1dfd0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1dfe0 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30  Resolved       0
1dff0 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74  x00004  /* Ident
1e000 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
1e010 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
1e020 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
1e030 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20 20  e      0x00008  
1e040 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20  /* Contains agg 
1e050 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47  functions or a G
1e060 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
1e070 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20 20 20  ne SF_HasAgg    
1e080 20 20 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a       0x00010  /*
1e090 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
1e0a0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
1e0b0 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
1e0c0 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30  Ephemeral  0x000
1e0d0 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  20  /* Uses the 
1e0e0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1e0f0 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
1e100 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
1e110 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71    0x00040  /* sq
1e120 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
1e130 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
1e140 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
1e150 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
1e160 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d  0x00080  /* FROM
1e170 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
1e180 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
1e190 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
1e1a0 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30  mpound       0x0
1e1b0 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0100  /* Part of
1e1c0 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72   a compound quer
1e1d0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  y */.#define SF_
1e1e0 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 30  Values         0
1e1f0 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68  x00200  /* Synth
1e200 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55  esized from VALU
1e210 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  ES clause */.#de
1e220 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c  fine SF_MultiVal
1e230 75 65 20 20 20 20 20 30 78 30 30 34 30 30 20 20  ue     0x00400  
1e240 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53  /* Single VALUES
1e250 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69   term with multi
1e260 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
1e270 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
1e280 6d 20 20 20 20 20 30 78 30 30 38 30 30 20 20 2f  m     0x00800  /
1e290 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
1e2a0 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
1e2b0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1e2c0 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   SF_MinMaxAgg   
1e2d0 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41     0x01000  /* A
1e2e0 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e  ggregate contain
1e2f0 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78  ing min() or max
1e300 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1e310 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20  _Recursive      
1e320 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20  0x02000  /* The 
1e330 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f  recursive part o
1e340 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54  f a recursive CT
1e350 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  E */.#define SF_
1e360 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30  FixedLimit     0
1e370 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65  x04000  /* nSele
1e380 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20 63  ctRow set by a c
1e390 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f  onstant LIMIT */
1e3a0 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62  .#define SF_Mayb
1e3b0 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30  eConvert   0x080
1e3c0 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76  00  /* Need conv
1e3d0 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
1e3e0 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
1e3f0 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76  .#define SF_Conv
1e400 65 72 74 65 64 20 20 20 20 20 20 30 78 31 30 30  erted      0x100
1e410 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72  00  /* By conver
1e420 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1e430 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
1e440 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64  define SF_Includ
1e450 65 48 69 64 64 65 6e 20 20 30 78 32 30 30 30 30  eHidden  0x20000
1e460 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64    /* Include hid
1e470 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f  den columns in o
1e480 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65  utput */.#define
1e490 20 53 46 5f 43 6f 6d 70 6c 65 78 52 65 73 75 6c   SF_ComplexResul
1e4a0 74 20 20 30 78 34 30 30 30 30 20 20 2f 2a 20 52  t  0x40000  /* R
1e4b0 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 73  esult contains s
1e4c0 75 62 71 75 65 72 79 20 6f 72 20 66 75 6e 63 74  ubquery or funct
1e4d0 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ion */../*.** Th
1e4e0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53  e results of a S
1e4f0 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73  ELECT can be dis
1e500 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65  tributed in seve
1e510 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66  ral ways, as def
1e520 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f  ined.** by one o
1e530 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1e540 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52  macros.  The "SR
1e550 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
1e560 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a  "SELECT Result.*
1e570 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20  * Type"..**.**  
1e580 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20     SRT_Union    
1e590 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1e5a0 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74   as a key in a t
1e5b0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a  emporary index.*
1e5c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e5d0 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64        identified
1e5e0 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61   by pDest->iSDPa
1e5f0 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
1e600 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65  T_Except      Re
1e610 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f  move results fro
1e620 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  m the temporary 
1e630 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44  index pDest->iSD
1e640 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
1e650 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
1e660 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d  Store a 1 in mem
1e670 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e  ory cell pDest->
1e680 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72  iSDParm if the r
1e690 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20  esult.**        
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1e6b0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a   is not empty..*
1e6c0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1e6d0 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74  card     Throw t
1e6e0 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e  he results away.
1e6f0 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62    This is used b
1e700 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20  y SELECT.**     
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e720 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
1e730 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65  n triggers whose
1e740 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73   only purpose is
1e750 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e760 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65          the side
1e770 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63  -effects of func
1e780 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  tions..**.** All
1e790 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72   of the above ar
1e7a0 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65  e free to ignore
1e7b0 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20   their ORDER BY 
1e7c0 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68  clause. Those th
1e7d0 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73  at.** follow mus
1e7e0 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45  t honor the ORDE
1e7f0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
1e800 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75  **     SRT_Outpu
1e810 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20  t      Generate 
1e820 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20  a row of output 
1e830 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65  (using the OP_Re
1e840 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20  sultRow.**      
1e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1e860 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20  pcode) for each 
1e870 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c  row in the resul
1e880 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  t set..**.**    
1e890 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
1e8a0 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74   Only valid if t
1e8b0 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73  he result is a s
1e8c0 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  ingle column..**
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8e0 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66       Store the f
1e8f0 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  irst column of t
1e900 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20  he first result 
1e910 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  row.**          
1e920 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65             in re
1e930 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1e940 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64  DParm then aband
1e950 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20  on the rest.**  
1e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e970 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e     of the query.
1e980 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69    This destinati
1e990 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49  on implies "LIMI
1e9a0 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  T 1"..**.**     
1e9b0 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
1e9c0 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20  The result must 
1e9d0 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  be a single colu
1e9e0 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a  mn.  Store each.
1e9f0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ea00 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65         row of re
1ea10 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20  sult as the key 
1ea20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  in table pDest->
1ea30 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea50 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69  Apply the affini
1ea60 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73  ty pDest->affSds
1ea70 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67  t before storing
1ea80 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ea90 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e          results.
1eaa0 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d    Used to implem
1eab0 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20  ent "IN (SELECT 
1eac0 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  ...)"..**.**    
1ead0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1eae0 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f   Create an tempo
1eaf0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1eb00 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74  ->iSDParm and st
1eb10 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1eb20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72             the r
1eb30 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65  esult there. The
1eb40 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
1eb50 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20  open after.**   
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb70 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68    returning.  Th
1eb80 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54  is is like SRT_T
1eb90 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74  able except that
1eba0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ebb0 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73          this des
1ebc0 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50  tination uses OP
1ebd0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74  _OpenEphemeral t
1ebe0 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20  o create.**     
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec00 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e  the table first.
1ec10 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43  .**.**     SRT_C
1ec20 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72  oroutine   Gener
1ec30 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65  ate a co-routine
1ec40 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20   that returns a 
1ec50 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20  new row of.**   
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74    results each t
1ec80 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65  ime it is invoke
1ec90 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f  d.  The entry po
1eca0 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  int.**          
1ecb0 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
1ecc0 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20  e co-routine is 
1ecd0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1ece0 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
1ecf0 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  m.**            
1ed00 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65           and the
1ed10 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73   result row is s
1ed20 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e  tored in pDest->
1ed30 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a  nDest registers.
1ed40 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ed50 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20         starting 
1ed60 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73  with pDest->iSds
1ed70 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1ed80 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f  _Table       Sto
1ed90 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65  re results in te
1eda0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1edb0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1edc0 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20       SRT_Fifo   
1edd0 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b       This is lik
1ede0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65  e SRT_EphemTab e
1edf0 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74  xcept that the t
1ee00 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  able.**         
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61              is a
1ee20 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64  ssumed to alread
1ee30 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f  y be open.  SRT_
1ee40 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20  Fifo has.**     
1ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee60 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  the additional p
1ee70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67  roperty of being
1ee80 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a   able to ignore.
1ee90 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1eea0 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52         the ORDER
1eeb0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
1eec0 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69  *     SRT_DistFi
1eed0 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75  fo    Store resu
1eee0 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  lts in a tempora
1eef0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1ef00 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d  But also use tem
1ef30 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1ef40 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73  st->iSDParm+1 as
1ef50 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ef60 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64          a record
1ef70 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65   of all prior re
1ef80 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65  sults and ignore
1ef90 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a   any duplicate.*
1efa0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1efb0 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d        rows.  Nam
1efc0 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69  e means:  "Disti
1efd0 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a  nct Fifo"..**.**
1efe0 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20       SRT_Queue  
1eff0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1f000 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1f010 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1f020 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20  arm (really.**  
1f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f040 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41     an index).  A
1f050 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65  ppend a sequence
1f060 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20   number so that 
1f070 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20  all entries.**  
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f090 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e     are distinct.
1f0a0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1f0b0 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65  istQueue   Store
1f0c0 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
1f0d0 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
1f0e0 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69  ->iSDParm only i
1f0f0 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
1f100 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d           the sam
1f110 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76  e record has nev
1f120 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62  er been stored b
1f130 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20  efore.  The.**  
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73     index at pDes
1f160 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c  t->iSDParm+1 hol
1f170 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72  d all prior stor
1f180 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  es..*/.#define S
1f190 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20  RT_Union        
1f1a0 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
1f1b0 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  lt as keys in an
1f1c0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1f1d0 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20  e SRT_Except    
1f1e0 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20     2  /* Remove 
1f1f0 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e  result from a UN
1f200 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  ION index */.#de
1f210 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20  fine SRT_Exists 
1f220 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72        3  /* Stor
1f230 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c  e 1 if the resul
1f240 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a  t is not empty *
1f250 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1f260 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a  scard      4  /*
1f270 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65   Do not save the
1f280 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72   results anywher
1f290 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1f2a0 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20  _Fifo         5 
1f2b0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1f2c0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
1f2d0 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
1f2e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f2f0 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20  DistFifo     6  
1f300 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f  /* Like SRT_Fifo
1f310 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73  , but unique res
1f320 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ults only */.#de
1f330 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20  fine SRT_Queue  
1f340 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72        7  /* Stor
1f350 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71  e result in an q
1f360 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ueue */.#define 
1f370 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
1f380 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   8  /* Like SRT_
1f390 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75  Queue, but uniqu
1f3a0 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
1f3b0 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20  /../* The ORDER 
1f3c0 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e  BY clause is ign
1f3d0 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20  ored for all of 
1f3e0 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  the above */.#de
1f3f0 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72  fine IgnorableOr
1f400 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44  derby(X) ((X->eD
1f410 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75  est)<=SRT_DistQu
1f420 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52  eue)..#define SR
1f430 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39  T_Output       9
1f440 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68    /* Output each
1f450 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1f460 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65  /.#define SRT_Me
1f470 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a  m         10  /*
1f480 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
1f490 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a   a memory cell *
1f4a0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65  /.#define SRT_Se
1f4b0 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a  t         11  /*
1f4c0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
1f4d0 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1f4e0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1f4f0 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32  T_EphemTab    12
1f500 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e    /* Create tran
1f510 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74  sient tab and st
1f520 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62  ore like SRT_Tab
1f530 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  le */.#define SR
1f540 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33  T_Coroutine   13
1f550 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20    /* Generate a 
1f560 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
1f570 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
1f580 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1f590 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  14  /* Store res
1f5a0 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1f5b0 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1f5c0 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  wid */../*.** An
1f5d0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
1f5e0 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  s object describ
1f5f0 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20  es where to put 
1f600 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
1f610 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74  f.** a SELECT st
1f620 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
1f630 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a  ct SelectDest {.
1f640 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20    u8 eDest;     
1f650 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f         /* How to
1f660 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20   dispose of the 
1f670 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20  results.  On of 
1f680 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a  SRT_* above. */.
1f690 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20    int iSDParm;  
1f6a0 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61         /* A para
1f6b0 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68  meter used by th
1f6c0 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c  e eDest disposal
1f6d0 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74   method */.  int
1f6e0 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   iSdst;         
1f6f0 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1f700 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73  er where results
1f710 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a   are written */.
1f720 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20    int nSdst;    
1f730 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f740 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
1f750 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63 68 61  located */.  cha
1f760 72 20 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20  r *zAffSdst;    
1f770 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73    /* Affinity us
1f780 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53  ed when eDest==S
1f790 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70 72  RT_Set */.  Expr
1f7a0 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
1f7b0 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20   /* Key columns 
1f7c0 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e  for SRT_Queue an
1f7d0 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  d SRT_DistQueue 
1f7e0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72  */.};../*.** Dur
1f7f0 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74  ing code generat
1f800 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  ion of statement
1f810 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74  s that do insert
1f820 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45  s into AUTOINCRE
1f830 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20  MENT.** tables, 
1f840 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
1f850 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74  formation is att
1f860 61 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62  ached to the Tab
1f870 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a  le.u.autoInc.p.*
1f880 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63  * pointer of eac
1f890 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  h autoincrement 
1f8a0 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20  table to record 
1f8b0 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d  some side inform
1f8c0 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68  ation that.** th
1f8d0 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1f8e0 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65   needs.  We have
1f8f0 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62   to keep per-tab
1f900 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  le autoincrement
1f910 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
1f920 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20  in case inserts 
1f930 61 72 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20  are done within 
1f940 74 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67  triggers.  Trigg
1f950 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f  ers do not.** no
1f960 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74  rmally coordinat
1f970 65 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69  e their activiti
1f980 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65  es, but we do ne
1f990 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65  ed to coordinate
1f9a0 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20   the.** loading 
1f9b0 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75  and saving of au
1f9c0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f  toincrement info
1f9d0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
1f9e0 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b  ct AutoincInfo {
1f9f0 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
1fa00 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74  pNext;   /* Next
1fa10 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61   info block in a
1fa20 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c   list of them al
1fa30 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  l */.  Table *pT
1fa40 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ab;          /* 
1fa50 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20  Table this info 
1fa60 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20  block refers to 
1fa70 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
1fa80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1fa90 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  dex in sqlite3.a
1faa0 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65  Db[] of database
1fab0 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f   holding pTab */
1fac0 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20  .  int regCtr;  
1fad0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
1fae0 72 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64  ry register hold
1faf0 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f  ing the rowid co
1fb00 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unter */.};../*.
1fb10 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
1fb20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1fb30 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1fb40 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
1fb50 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67  or each.** trigg
1fb60 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66  er that may be f
1fb70 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69  ired while parsi
1fb80 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50  ng an INSERT, UP
1fb90 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a  DATE or DELETE.*
1fba0 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c  * statement. All
1fbb0 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72   such objects ar
1fbc0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
1fbd0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
1fbe0 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70  ed at.** Parse.p
1fbf0 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64  TriggerPrg and d
1fc00 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74  eleted once stat
1fc10 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f  ement compilatio
1fc20 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f  n has been.** co
1fc30 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41  mpleted..**.** A
1fc40 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61   Vdbe sub-progra
1fc50 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  m that implement
1fc60 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57  s the body and W
1fc70 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72  HEN clause of tr
1fc80 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72  igger.** Trigger
1fc90 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73  Prg.pTrigger, as
1fca0 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74  suming a default
1fcb0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1fcc0 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65  use of.** Trigge
1fcd0 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20  rPrg.orconf, is 
1fce0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72  stored in the Tr
1fcf0 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61  iggerPrg.pProgra
1fd00 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54  m variable..** T
1fd10 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  he Parse.pTrigge
1fd20 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20  rPrg list never 
1fd30 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74  contains two ent
1fd40 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ries with the sa
1fd50 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72  me.** values for
1fd60 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61   both pTrigger a
1fd70 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a  nd orconf..**.**
1fd80 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   The TriggerPrg.
1fd90 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69  aColmask[0] vari
1fda0 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61  able is set to a
1fdb0 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   mask of old.* c
1fdc0 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73  olumns.** access
1fdd0 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20  ed (or set to 0 
1fde0 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72  for triggers fir
1fdf0 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
1fe00 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74  f INSERT.** stat
1fe10 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72  ements). Similar
1fe20 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50  ly, the TriggerP
1fe30 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76  rg.aColmask[1] v
1fe40 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
1fe50 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e  o.** a mask of n
1fe60 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65  ew.* columns use
1fe70 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
1fe80 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  ..*/.struct Trig
1fe90 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67  gerPrg {.  Trigg
1fea0 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
1feb0 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68     /* Trigger th
1fec0 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63  is program was c
1fed0 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54  oded from */.  T
1fee0 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74  riggerPrg *pNext
1fef0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65  ;      /* Next e
1ff00 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54  ntry in Parse.pT
1ff10 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a  riggerPrg list *
1ff20 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
1ff30 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50  pProgram;   /* P
1ff40 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74  rogram implement
1ff50 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63  ing pTrigger/orc
1ff60 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63  onf */.  int orc
1ff70 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  onf;            
1ff80 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
1ff90 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a  ONFLICT policy *
1ffa0 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b  /.  u32 aColmask
1ffb0 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  [2];        /* M
1ffc0 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e  asks of old.*, n
1ffd0 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63  ew.* columns acc
1ffe0 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  essed */.};../*.
1fff0 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64  ** The yDbMask d
20000 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20  atatype for the 
20010 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61  bitmask of all a
20020 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
20030 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  s..*/.#if SQLITE
20040 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
20050 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
20060 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b  ned char yDbMask
20070 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  [(SQLITE_MAX_ATT
20080 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64  ACHED+9)/8];.# d
20090 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
200a0 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28  (M,I)    (((M)[(
200b0 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37  I)/8]&(1<<((I)&7
200c0 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
200d0 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
200e0 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30      memset((M),0
200f0 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65  ,sizeof(M)).# de
20100 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
20110 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f  ,I)     (M)[(I)/
20120 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29  8]|=(1<<((I)&7))
20130 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20140 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c  AllZero(M)   sql
20150 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
20160 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62  o(M).# define Db
20170 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
20180 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41   (sqlite3DbMaskA
20190 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65  llZero(M)==0).#e
201a0 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e  lse.  typedef un
201b0 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61  signed int yDbMa
201c0 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  sk;.# define DbM
201d0 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
201e0 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b  (((M)&(((yDbMask
201f0 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23  )1)<<(I)))!=0).#
20200 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
20210 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30  ro(M)      (M)=0
20220 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20230 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
20240 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  |=(((yDbMask)1)<
20250 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44  <(I)).# define D
20260 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
20270 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e    (M)==0.# defin
20280 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28  e DbMaskNonZero(
20290 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64  M)   (M)!=0.#end
202a0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c  if../*.** An SQL
202b0 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   parser context.
202c0 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73    A copy of this
202d0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
202e0 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20  ssed through.** 
202f0 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64  the parser and d
20300 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65  own into all the
20310 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72   parser action r
20320 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20  outine in order 
20330 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75  to.** carry arou
20340 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  nd information t
20350 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f  hat is global to
20360 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73   the entire pars
20370 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  e..**.** The str
20380 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65  ucture is divide
20390 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73  d into two parts
203a0 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73  .  When the pars
203b0 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67  er and code.** g
203c0 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65  enerate call the
203d0 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76  mselves recursiv
203e0 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70  ely, the first p
203f0 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63  art of the struc
20400 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74  ture.** is const
20410 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f  ant but the seco
20420 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74  nd part is reset
20430 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
20440 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20  g and end of.** 
20450 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a  each recursion..
20460 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65  **.** The nTable
20470 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c  Lock and aTableL
20480 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72  ock variables ar
20490 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74  e only used if t
204a0 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a  he shared-cache.
204b0 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
204c0 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
204d0 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
204e0 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
204f0 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
20500 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
20510 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
20520 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
20530 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
20540 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
20550 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
20560 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
20570 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
20580 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
20590 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
205a0 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
205b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
205c0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
205d0 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
205e0 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
205f0 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
20600 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
20610 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
20620 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
20630 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
20640 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
20650 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
20660 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
20670 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
20680 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
20690 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
206a0 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
206b0 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
206c0 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
206d0 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
206e0 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
206f0 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
20700 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
20710 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
20720 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
20730 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20740 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
20750 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
20760 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
20770 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
20780 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20790 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
207a0 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
207b0 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73  Reg[] */.  u8 is
207c0 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20  MultiWrite;     
207d0 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
207e0 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f  ment may modify/
207f0 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20  insert multiple 
20800 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79  rows */.  u8 may
20810 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f  Abort;         /
20820 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
20830 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e  ent may throw an
20840 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
20850 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70   */.  u8 hasComp
20860 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65  ound;      /* Ne
20870 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e  ed to invoke con
20880 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
20890 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
208a0 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61  /.  u8 okConstFa
208b0 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74  ctor;    /* OK t
208c0 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  o factor out con
208d0 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64  stants */.  u8 d
208e0 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b  isableLookaside;
208f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69   /* Number of ti
20900 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61  mes lookaside ha
20910 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20  s been disabled 
20920 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
20930 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
20940 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
20950 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
20960 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
20970 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
20980 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
20990 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
209a0 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
209b0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
209c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
209d0 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
209e0 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
209f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20a00 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
20a10 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
20a20 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
20a30 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
20a40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
20a50 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
20a60 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
20a70 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  OpAlloc;        
20a80 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f  /* Number of slo
20a90 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ts allocated for
20aa0 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
20ab0 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20   int szOpAlloc; 
20ac0 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
20ad0 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61  f memory space a
20ae0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
20af0 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
20b00 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20   iSelfTab;      
20b10 20 20 2f 2a 20 54 61 62 6c 65 20 61 73 73 6f 63    /* Table assoc
20b20 69 61 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e  iated with an in
20b30 64 65 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20  dex on expr, or 
20b40 6e 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 20  negative.       
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b60 2a 2a 20 6f 66 20 74 68 65 20 62 61 73 65 20 72  ** of the base r
20b70 65 67 69 73 74 65 72 20 64 75 72 69 6e 67 20 63  egister during c
20b80 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20  heck-constraint 
20b90 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  eval */.  int nL
20ba0 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  abel;          /
20bb0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65  * Number of labe
20bc0 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74  ls used */.  int
20bd0 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20   *aLabel;       
20be0 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f    /* Space to ho
20bf0 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f  ld the labels */
20c00 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f  .  ExprList *pCo
20c10 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74  nstExpr;/* Const
20c20 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
20c30 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74  */.  Token const
20c40 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d  raintName;/* Nam
20c50 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
20c60 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65  int currently be
20c70 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ing parsed */.  
20c80 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
20c90 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
20ca0 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
20cb0 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
20cc0 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
20cd0 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
20ce0 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
20cf0 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
20d00 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
20d10 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20  regRowid;       
20d20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
20d30 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52  ding rowid of CR
20d40 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79  EATE TABLE entry
20d50 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f   */.  int regRoo
20d60 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  t;         /* Re
20d70 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
20d80 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
20d90 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20  for new objects 
20da0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67  */.  int nMaxArg
20db0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  ;         /* Max
20dc0 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20   args passed to 
20dd0 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79  user function by
20de0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
20df0 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
20e00 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20e10 20 6f 66 20 53 45 4c 45 43 54 20 73 74 6d 74 73   of SELECT stmts
20e20 2e 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 53 65  . Counter for Se
20e30 6c 65 63 74 2e 73 65 6c 49 64 20 2a 2f 0a 23 69  lect.selId */.#i
20e40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
20e50 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
20e60 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b   int nTableLock;
20e70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20e80 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54  r of locks in aT
20e90 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61  ableLock */.  Ta
20ea0 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c  bleLock *aTableL
20eb0 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64  ock; /* Required
20ec0 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72   table locks for
20ed0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
20ee0 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41  de */.#endif.  A
20ef0 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e  utoincInfo *pAin
20f00 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  c;  /* Informati
20f10 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43  on about AUTOINC
20f20 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20  REMENT counters 
20f30 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70  */.  Parse *pTop
20f40 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72  level;    /* Par
20f50 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  se structure for
20f60 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f   main program (o
20f70 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62  r NULL) */.  Tab
20f80 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b  le *pTriggerTab;
20f90 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67    /* Table trigg
20fa0 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  ers are being co
20fb0 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74  ded for */.  int
20fc0 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20   addrCrTab;     
20fd0 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
20fe0 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f  OP_CreateBtree o
20ff0 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20  pcode on CREATE 
21000 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e  TABLE */.  u32 n
21010 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20  QueryLoop;      
21020 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66  /* Est number of
21030 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61   iterations of a
21040 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28   query (10*log2(
21050 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64  N)) */.  u32 old
21060 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
21070 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   Mask of old.* c
21080 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
21090 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61  d */.  u32 newma
210a0 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
210b0 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
210c0 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
210d0 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72  */.  u8 eTrigger
210e0 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f  Op;       /* TK_
210f0 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
21100 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a  T or TK_DELETE *
21110 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20  /.  u8 eOrconf; 
21120 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
21130 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
21140 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67  policy for trigg
21150 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38  er steps */.  u8
21160 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73   disableTriggers
21170 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69  ;  /* True to di
21180 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a  sable triggers *
21190 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /..  /**********
211a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
211e0 0a 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f  .  ** Fields abo
211f0 76 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  ve must be initi
21200 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20  alized to zero. 
21210 20 54 68 65 20 66 69 65 6c 64 73 20 74 68 61 74   The fields that
21220 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f   follow,.  ** do
21230 77 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e  wn to the beginn
21240 69 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75 72  ing of the recur
21250 73 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f  sive section, do
21260 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 0a   not need to be.
21270 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64    ** initialized
21280 20 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62 65   as they will be
21290 20 73 65 74 20 62 65 66 6f 72 65 20 62 65 69 6e   set before bein
212a0 67 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f 75  g used.  The bou
212b0 6e 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64 65  ndary is.  ** de
212c0 74 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66 73  termined by offs
212d0 65 74 6f 66 28 50 61 72 73 65 2c 61 54 65 6d 70  etof(Parse,aTemp
212e0 52 65 67 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  Reg)..  ********
212f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21330 2a 2a 2f 0a 0a 20 20 69 6e 74 20 61 54 65 6d 70  **/..  int aTemp
21340 52 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f  Reg[8];        /
21350 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
21360 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
21370 69 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65  isters */.  Toke
21380 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20  n sNameToken;   
21390 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74      /* Token wit
213a0 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63  h unqualified sc
213b0 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65  hema object name
213c0 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
213d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
213f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21410 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63  .  ** Above is c
21420 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20  onstant between 
21430 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c  recursions.  Bel
21440 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f  ow is reset befo
21450 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a  re and after.  *
21460 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
21470 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
21480 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77  between these tw
21490 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74  o regions is det
214a0 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69  ermined.  ** usi
214b0 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  ng offsetof(Pars
214c0 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f  e,sLastToken) so
214d0 20 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20   the sLastToken 
214e0 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68  field must be th
214f0 65 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69 65  e.  ** first fie
21500 6c 64 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ld in the recurs
21510 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a  ive region..  **
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 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21560 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e  ******/..  Token
21570 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20   sLastToken;    
21580 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
21590 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  oken parsed */. 
215a0 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20   ynVar nVar;    
215b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
215c0 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69  mber of '?' vari
215d0 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68  ables seen in th
215e0 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a  e SQL so far */.
215f0 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65    u8 iPkSortOrde
21600 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  r;          /* A
21610 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49  SC or DESC for I
21620 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
21630 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  EY */.  u8 expla
21640 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
21650 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
21660 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
21670 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
21680 65 72 79 20 2a 2f 0a 23 69 66 20 21 28 64 65 66  ery */.#if !(def
21690 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
216a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26  _VIRTUALTABLE) &
216b0 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
216c0 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
216d0 29 29 0a 20 20 75 38 20 65 50 61 72 73 65 4d 6f  )).  u8 eParseMo
216e0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  de;            /
216f0 2a 20 50 41 52 53 45 5f 4d 4f 44 45 5f 58 58 58  * PARSE_MODE_XXX
21700 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 65 6e   constant */.#en
21710 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
21720 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21730 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 74 61 62  ABLE.  int nVtab
21740 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
21750 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
21760 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20  rtual tables to 
21770 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lock */.#endif. 
21780 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
21790 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
217a0 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65  pression tree he
217b0 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20  ight of current 
217c0 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69  sub-select */.#i
217d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
217e0 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20  T_EXPLAIN.  int 
217f0 61 64 64 72 45 78 70 6c 61 69 6e 3b 20 20 20 20  addrExplain;    
21800 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
21810 20 6f 66 20 63 75 72 72 65 6e 74 20 4f 50 5f 45   of current OP_E
21820 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 2a 2f  xplain opcode */
21830 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74 20  .#endif.  VList 
21840 2a 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20 20  *pVList;        
21850 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62      /* Mapping b
21860 65 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65 20  etween variable 
21870 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65 72  names and number
21880 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65  s */.  Vdbe *pRe
21890 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20  prepare;        
218a0 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70   /* VM being rep
218b0 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33  repared (sqlite3
218c0 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a  Reprepare()) */.
218d0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
218e0 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ail;        /* A
218f0 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
21900 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
21910 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
21920 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
21930 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74  ;         /* A t
21940 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74  able being const
21950 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45  ructed by CREATE
21960 20 54 41 42 4c 45 20 2a 2f 0a 20 20 49 6e 64 65   TABLE */.  Inde
21970 78 20 2a 70 4e 65 77 49 6e 64 65 78 3b 20 20 20  x *pNewIndex;   
21980 20 20 20 20 20 20 2f 2a 20 41 6e 20 69 6e 64 65        /* An inde
21990 78 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  x being construc
219a0 74 65 64 20 62 79 20 43 52 45 41 54 45 20 49 4e  ted by CREATE IN
219b0 44 45 58 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  DEX */.  Trigger
219c0 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
219d0 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
219e0 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
219f0 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
21a00 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
21a10 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
21a20 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
21a30 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
21a40 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
21a50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21a60 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
21a70 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
21a80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21a90 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
21aa0 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
21ab0 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
21ac0 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
21ad0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
21ae0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
21af0 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
21b00 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
21b10 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
21b20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
21b30 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
21b40 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
21b50 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
21b60 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
21b70 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
21b80 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
21b90 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
21ba0 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
21bb0 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
21bc0 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
21bd0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20   NULL */.  With 
21be0 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20  *pWithToFree;   
21bf0 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69       /* Free thi
21c00 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74  s WITH object at
21c10 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
21c20 70 61 72 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66  parse */.#ifndef
21c30 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
21c40 45 52 54 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65  ERTABLE.  Rename
21c50 54 6f 6b 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20  Token *pRename; 
21c60 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75      /* Tokens su
21c70 62 6a 65 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e  bject to renamin
21c80 67 20 62 79 20 41 4c 54 45 52 20 54 41 42 4c 45  g by ALTER TABLE
21c90 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23   */.#endif.};..#
21ca0 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
21cb0 45 5f 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20  E_NORMAL        
21cc0 30 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  0.#define PARSE_
21cd0 4d 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41  MODE_DECLARE_VTA
21ce0 42 20 20 31 0a 23 64 65 66 69 6e 65 20 50 41 52  B  1.#define PAR
21cf0 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43  SE_MODE_RENAME_C
21d00 4f 4c 55 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20  OLUMN 2.#define 
21d10 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d  PARSE_MODE_RENAM
21d20 45 5f 54 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a  E_TABLE  3../*.*
21d30 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e  * Sizes and poin
21d40 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20  ters of various 
21d50 70 61 72 74 73 20 6f 66 20 74 68 65 20 50 61 72  parts of the Par
21d60 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64  se object..*/.#d
21d70 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f  efine PARSE_HDR_
21d80 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  SZ offsetof(Pars
21d90 65 2c 61 54 65 6d 70 52 65 67 29 20 2f 2a 20 52  e,aTempReg) /* R
21da0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 77 2f  ecursive part w/
21db0 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64  o aColCache*/.#d
21dc0 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55  efine PARSE_RECU
21dd0 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28  RSE_SZ offsetof(
21de0 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e  Parse,sLastToken
21df0 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76  )    /* Recursiv
21e00 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e  e part */.#defin
21e10 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20  e PARSE_TAIL_SZ 
21e20 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50  (sizeof(Parse)-P
21e30 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29  ARSE_RECURSE_SZ)
21e40 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76   /* Non-recursiv
21e50 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e  e part */.#defin
21e60 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20  e PARSE_TAIL(X) 
21e70 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41  (((char*)(X))+PA
21e80 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
21e90 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74   /* Pointer to t
21ea0 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65  ail */../*.** Re
21eb0 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72  turn true if cur
21ec0 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e  rently inside an
21ed0 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
21ee0 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f  _vtab() call..*/
21ef0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
21f00 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
21f10 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
21f20 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c  CLARE_VTAB 0.#el
21f30 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  se.  #define IN_
21f40 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50  DECLARE_VTAB (pP
21f50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65  arse->eParseMode
21f60 3d 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43  ==PARSE_MODE_DEC
21f70 4c 41 52 45 5f 56 54 41 42 29 0a 23 65 6e 64 69  LARE_VTAB).#endi
21f80 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
21f90 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
21fa0 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65  TABLE).  #define
21fb0 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43   IN_RENAME_OBJEC
21fc0 54 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  T 0.#else.  #def
21fd0 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42  ine IN_RENAME_OB
21fe0 4a 45 43 54 20 28 70 50 61 72 73 65 2d 3e 65 50  JECT (pParse->eP
21ff0 61 72 73 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f  arseMode>=PARSE_
22000 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55  MODE_RENAME_COLU
22010 4d 4e 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  MN).#endif..#if 
22020 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22030 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
22040 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
22050 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
22060 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49  BLE).  #define I
22070 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20  N_SPECIAL_PARSE 
22080 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
22090 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52  e IN_SPECIAL_PAR
220a0 53 45 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72  SE (pParse->ePar
220b0 73 65 4d 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f  seMode!=PARSE_MO
220c0 44 45 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69  DE_NORMAL).#endi
220d0 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
220e0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
220f0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
22100 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
22110 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
22120 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
22130 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
22140 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
22150 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
22160 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
22170 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
22180 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
22190 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
221a0 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
221b0 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
221c0 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
221d0 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
221e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
221f0 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
22200 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
22210 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
22220 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
22230 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  ious opcodes..**
22240 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
22250 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
22260 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
22270 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  *    OPFLAG_LENG
22280 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49  THARG    == SQLI
22290 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a  TE_FUNC_LENGTH.*
222a0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45  *    OPFLAG_TYPE
222b0 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49  OFARG    == SQLI
222c0 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a  TE_FUNC_TYPEOF.*
222d0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  *    OPFLAG_BULK
222e0 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45  CSR      == BTRE
222f0 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20  E_BULKLOAD.**   
22300 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
22310 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45       == BTREE_SE
22320 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c  EK_EQ.**    OPFL
22330 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
22340 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45  == BTREE_FORDELE
22350 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TE.**    OPFLAG_
22360 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20  SAVEPOSITION == 
22370 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49  BTREE_SAVEPOSITI
22380 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ON.**    OPFLAG_
22390 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20  AUXDELETE    == 
223a0 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a  BTREE_AUXDELETE.
223b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
223c0 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
223d0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e  0x01    /* OP_In
223e0 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64  sert: Set to upd
223f0 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20  ate db->nChange 
22400 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
22410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22420 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20          /* Also 
22430 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20  used in P2 (not 
22440 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65  P5) of OP_Delete
22450 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22460 41 47 5f 4e 4f 43 48 4e 47 20 20 20 20 20 20 20  AG_NOCHNG       
22470 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56   0x01    /* OP_V
22480 43 6f 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20  Column nochange 
22490 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  for UPDATE */.#d
224a0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48  efine OPFLAG_EPH
224b0 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20  EM         0x01 
224c0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a     /* OP_Column:
224d0 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75   Ephemeral outpu
224e0 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69  t is ok */.#defi
224f0 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
22500 57 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20  WID     0x20    
22510 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
22520 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
22530 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22540 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30  _ISUPDATE      0
22550 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f  x04    /* This O
22560 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73  P_Insert is an s
22570 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  ql UPDATE */.#de
22580 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45  fine OPFLAG_APPE
22590 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20  ND        0x08  
225a0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
225b0 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
225c0 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  end */.#define O
225d0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
225e0 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54  ULT 0x10    /* T
225f0 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65  ry to avoid a se
22600 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72  ek in BtreeInser
22610 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  t() */.#define O
22620 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20  PFLAG_ISNOOP    
22630 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
22640 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72  P_Delete does pr
22650 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e  e-update-hook on
22660 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
22670 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
22680 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
22690 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
226a0 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
226b0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
226c0 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
226d0 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
226e0 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
226f0 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
22700 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
22710 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
22720 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
22730 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
22740 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
22750 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  ine OPFLAG_SEEKE
22760 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20  Q        0x02   
22770 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75   /* OP_Open** cu
22780 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65  rsor uses EQ see
22790 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
227a0 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  e OPFLAG_FORDELE
227b0 54 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f  TE     0x08    /
227c0 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64  * OP_Open should
227d0 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45   use BTREE_FORDE
227e0 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
227f0 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20  OPFLAG_P2ISREG  
22800 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
22810 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20  P2 to OP_Open** 
22820 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75  is a register nu
22830 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
22840 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20  OPFLAG_PERMUTE  
22850 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
22860 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20  OP_Compare: use 
22870 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
22880 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22890 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20  G_SAVEPOSITION  
228a0 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x02    /* OP_De
228b0 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76  lete/Insert: sav
228c0 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a  e cursor pos */.
228d0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41  #define OPFLAG_A
228e0 55 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  UXDELETE     0x0
228f0 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  4    /* OP_Delet
22900 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45  e: index in a DE
22910 4c 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69  LETE op */.#defi
22920 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47  ne OPFLAG_NOCHNG
22930 5f 4d 41 47 49 43 20 20 30 78 36 64 20 20 20 20  _MAGIC  0x6d    
22940 2f 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  /* OP_MakeRecord
22950 3a 20 73 65 72 69 61 6c 74 79 70 65 20 31 30 20  : serialtype 10 
22960 69 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20  is ok */../*. * 
22970 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65  Each trigger pre
22980 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
22990 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
229a0 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74  tored as an inst
229b0 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63  ance of. * struc
229c0 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a  t Trigger.. *. *
229d0 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73   Pointers to ins
229e0 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
229f0 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f   Trigger are sto
22a00 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e  red in two ways.
22a10 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74  . * 1. In the "t
22a20 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61  rigHash" hash ta
22a30 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65  ble (part of the
22a40 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72   sqlite3* that r
22a50 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a  epresents the. *
22a60 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54      database). T
22a70 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67  his allows Trigg
22a80 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  er structures to
22a90 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79   be retrieved by
22aa0 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c   name.. * 2. All
22ab0 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69   triggers associ
22ac0 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67  ated with a sing
22ad0 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  le table form a 
22ae0 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69  linked list, usi
22af0 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65  ng the. *    pNe
22b00 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72  xt member of str
22b10 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70  uct Trigger. A p
22b20 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
22b30 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
22b40 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20  he. *    linked 
22b50 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61  list is stored a
22b60 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22  s the "pTrigger"
22b70 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61   member of the a
22b80 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20  ssociated. *    
22b90 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a  struct Table.. *
22ba0 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69  . * The "step_li
22bb0 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74  st" member point
22bc0 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  s to the first e
22bd0 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b  lement of a link
22be0 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61  ed list. * conta
22bf0 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
22c00 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
22c10 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65  ed as the trigge
22c20 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73  r program.. */.s
22c30 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a  truct Trigger {.
22c40 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
22c50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
22c60 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69   name of the tri
22c70 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20  gger            
22c80 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
22c90 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20   char *table;   
22ca0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
22cb0 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f  table or view to
22cc0 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
22cd0 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20  er applies */.  
22ce0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
22cf0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
22d00 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
22d10 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
22d20 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75  T         */.  u
22d30 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20  8 tr_tm;        
22d40 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
22d50 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c   TRIGGER_BEFORE,
22d60 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a   TRIGGER_AFTER *
22d70 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b  /.  Expr *pWhen;
22d80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22d90 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
22da0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
22db0 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
22dc0 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c  /.  IdList *pCol
22dd0 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49  umns;       /* I
22de0 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44  f this is an UPD
22df0 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c  ATE OF <column-l
22e00 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20  ist> trigger,.  
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c             the <
22e30 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20  column-list> is 
22e40 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
22e50 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
22e60 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65  ;        /* Sche
22e70 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
22e80 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53  e trigger */.  S
22e90 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d  chema *pTabSchem
22ea0 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
22eb0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
22ec0 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67  table */.  Trigg
22ed0 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73  erStep *step_lis
22ee0 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20  t; /* Link list 
22ef0 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  of trigger progr
22f00 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20  am steps        
22f10 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65       */.  Trigge
22f20 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  r *pNext;       
22f30 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65    /* Next trigge
22f40 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
22f50 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d  h the table */.}
22f60 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67  ;../*.** A trigg
22f70 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42  er is either a B
22f80 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45  EFORE or an AFTE
22f90 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20  R trigger.  The 
22fa0 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61  following consta
22fb0 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65  nts.** determine
22fc0 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66   which..**.** If
22fd0 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69   there are multi
22fe0 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f  ple triggers, yo
22ff0 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20  u might of some 
23000 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20  BEFORE and some 
23010 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61  AFTER..** In tha
23020 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e  t cases, the con
23030 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e  stants below can
23040 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65   be ORed togethe
23050 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52  r..*/.#define TR
23060 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a  IGGER_BEFORE  1.
23070 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
23080 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a  AFTER   2../*. *
23090 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
230a0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
230b0 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ep is used to st
230c0 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c  ore a single SQL
230d0 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68   statement. * th
230e0 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  at is a part of 
230f0 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
23100 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  m.. *. * Instanc
23110 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
23120 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
23130 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
23140 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
23150 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
23160 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
23170 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
23180 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
23190 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20  ember of the. * 
231a0 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63  associated struc
231b0 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e  t Trigger instan
231c0 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  ce. The first el
231d0 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e  ement of the lin
231e0 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74  ked list is. * t
231f0 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66  he first step of
23200 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f   the trigger-pro
23210 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  gram.. *. * The 
23220 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69  "op" member indi
23230 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68  cates whether th
23240 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22  is is a "DELETE"
23250 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44  , "INSERT", "UPD
23260 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45  ATE" or. * "SELE
23270 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  CT" statement. T
23280 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74  he meanings of t
23290 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73  he other members
232a0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
232b0 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f  y the. * value o
232c0 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77  f "op" as follow
232d0 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  s:. *. * (op == 
232e0 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72  TK_INSERT). * or
232f0 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65  conf    -> store
23300 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  s the ON CONFLIC
23310 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70  T algorithm. * p
23320 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74  Select   -> If t
23330 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
23340 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54   INTO ... SELECT
23350 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
23360 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
23370 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
23380 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
23390 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
233a0 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  nt. Otherwise NU
233b0 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  LL.. * zTarget  
233c0 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
233d0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
233e0 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20  o insert into.. 
233f0 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49  * pExprList -> I
23400 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
23410 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c  ERT INTO ... VAL
23420 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  UES ... statemen
23430 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
23440 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
23450 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65  res values to be
23460 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72   inserted. Other
23470 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49  wise NULL.. * pI
23480 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68  dList   -> If th
23490 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
234a0 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d  INTO ... (<colum
234b0 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53  n-names>) VALUES
234c0 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20   .... *         
234d0 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20       statement, 
234e0 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73  then this stores
234f0 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65   the column-name
23500 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20  s to be. *      
23510 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64          inserted
23520 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70   into.. *. * (op
23530 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20   == TK_DELETE). 
23540 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
23550 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
23560 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
23570 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
23580 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
23590 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
235a0 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
235b0 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
235c0 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
235d0 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
235e0 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f  e NULL.. *. * (o
235f0 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
23600 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
23610 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
23620 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70   the table to up
23630 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20  date.. * pWhere 
23640 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
23650 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50  clause of the UP
23660 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
23670 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
23680 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
23690 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
236a0 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  LL.. * pExprList
236b0 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68   -> A list of th
236c0 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64  e columns to upd
236d0 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72  ate and the expr
236e0 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74  essions to updat
236f0 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
23700 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73    them to. See s
23710 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64  qlite3Update() d
23720 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ocumentation of 
23730 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20  "pChanges". *   
23740 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d             argum
23750 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75  ent.. *. */.stru
23760 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b  ct TriggerStep {
23770 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
23780 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
23790 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
237a0 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
237b0 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a  T, TK_SELECT */.
237c0 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20    u8 orconf;    
237d0 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c         /* OE_Rol
237e0 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20  lback etc. */.  
237f0 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20  Trigger *pTrig; 
23800 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67       /* The trig
23810 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74  ger that this st
23820 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  ep is a part of 
23830 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
23840 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c  lect;     /* SEL
23850 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72  ECT statement or
23860 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49   RHS of INSERT I
23870 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a  NTO SELECT ... *
23880 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65  /.  char *zTarge
23890 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67  t;       /* Targ
238a0 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c  et table for DEL
238b0 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53  ETE, UPDATE, INS
238c0 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ERT */.  Expr *p
238d0 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a  Where;        /*
238e0 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
238f0 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20  e for DELETE or 
23900 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a  UPDATE steps */.
23910 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70    ExprList *pExp
23920 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c  rList; /* SET cl
23930 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 20  ause for UPDATE 
23940 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
23950 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
23960 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
23970 53 45 52 54 20 2a 2f 0a 20 20 55 70 73 65 72 74  SERT */.  Upsert
23980 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f   *pUpsert;     /
23990 2a 20 55 70 73 65 72 74 20 63 6c 61 75 73 65 73  * Upsert clauses
239a0 20 6f 6e 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f   on an INSERT */
239b0 0a 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20  .  char *zSpan; 
239c0 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
239d0 6e 61 6c 20 53 51 4c 20 74 65 78 74 20 6f 66 20  nal SQL text of 
239e0 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
239f0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
23a00 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69  Next;  /* Next i
23a10 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20  n the link-list 
23a20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
23a30 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73   *pLast;  /* Las
23a40 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e  t element in lin
23a50 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f  k-list. Valid fo
23a60 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20  r 1st elem only 
23a70 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
23a80 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
23a90 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
23aa0 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62  formation used b
23ab0 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e  y the sqliteFix.
23ac0 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61  ...** routines a
23ad0 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20  s they walk the 
23ae0 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61  parse tree to ma
23af0 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65  ke database refe
23b00 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63  rences.** explic
23b10 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  it..*/.typedef s
23b20 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
23b30 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
23b40 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
23b50 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
23b60 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
23b70 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
23b80 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
23b90 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
23ba0 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
23bb0 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
23bc0 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
23bd0 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20   bVarOnly;      
23be0 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61   /* Check for va
23bf0 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
23c00 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73  s only */.  cons
23c10 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
23c20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
23c30 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
23c40 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
23c50 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
23c60 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
23c70 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
23c80 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
23c90 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
23ca0 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
23cb0 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
23cc0 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
23cd0 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
23ce0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
23cf0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
23d00 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
23d10 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
23d20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
23d30 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
23d40 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
23d50 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
23d60 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
23d70 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
23d80 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74  truct sqlite3_st
23d90 72 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  r {.  sqlite3 *d
23da0 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70  b;         /* Op
23db0 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20  tional database 
23dc0 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20  for lookaside.  
23dd0 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20  Can be NULL */. 
23de0 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
23df0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
23e00 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
23e10 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e   far */.  u32  n
23e20 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
23e30 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
23e40 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
23e50 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d  Text */.  u32  m
23e60 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
23e70 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
23e80 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30  d allocation.  0
23e90 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75   for no malloc u
23ea0 73 61 67 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e  sage */.  u32  n
23eb0 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
23ec0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
23ed0 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
23ee0 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
23ef0 3b 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54  ;       /* SQLIT
23f00 45 5f 4e 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54  E_NOMEM or SQLIT
23f10 45 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38  E_TOOBIG */.  u8
23f20 20 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20     printfFlags; 
23f30 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49     /* SQLITE_PRI
23f40 4e 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20  NTF flags below 
23f50 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51  */.};.#define SQ
23f60 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45  LITE_PRINTF_INTE
23f70 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e  RNAL 0x01  /* In
23f80 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20  ternal-use-only 
23f90 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77  converters allow
23fa0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
23fb0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46  LITE_PRINTF_SQLF
23fc0 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51  UNC  0x02  /* SQ
23fd0 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  L function argum
23fe0 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66  ents to VXPrintf
23ff0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
24000 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43  TE_PRINTF_MALLOC
24010 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65  ED 0x04  /* True
24020 20 69 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c   if xText is all
24030 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a  ocated space */.
24040 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f  .#define isMallo
24050 63 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70  ced(X)  (((X)->p
24060 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c  rintfFlags & SQL
24070 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f  ITE_PRINTF_MALLO
24080 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a  CED)!=0).../*.**
24090 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
240a0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
240b0 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
240c0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
240d0 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
240e0 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
240f0 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
24100 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
24110 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
24120 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
24130 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
24140 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
24150 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
24160 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
24170 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
24180 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
24190 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
241a0 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
241b0 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
241c0 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
241d0 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
241e0 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
241f0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
24200 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
24210 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75  ored here */.  u
24220 33 32 20 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20  32 mInitFlags;  
24230 20 20 20 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74     /* Flags cont
24240 72 6f 6c 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65  rolling error me
24250 73 73 61 67 65 73 20 2a 2f 0a 7d 20 49 6e 69 74  ssages */.} Init
24260 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  Data;../*.** All
24270 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
24280 6d 49 6e 69 74 46 6c 61 67 73 0a 2a 2f 0a 23 64  mInitFlags.*/.#d
24290 65 66 69 6e 65 20 49 4e 49 54 46 4c 41 47 5f 41  efine INITFLAG_A
242a0 6c 74 65 72 54 61 62 6c 65 20 20 20 30 78 30 30  lterTable   0x00
242b0 30 31 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61  01  /* This is a
242c0 20 72 65 70 61 72 73 65 20 61 66 74 65 72 20 41   reparse after A
242d0 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f  LTER TABLE */../
242e0 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63  *.** Structure c
242f0 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c  ontaining global
24300 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   configuration d
24310 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ata for the SQLi
24320 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
24330 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
24340 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73   also contains s
24350 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  ome state inform
24360 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
24370 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b   Sqlite3Config {
24380 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b  .  int bMemstat;
24390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243a0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
243b0 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74  enable memory st
243c0 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43  atus */.  int bC
243d0 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20  oreMutex;       
243e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
243f0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f  rue to enable co
24400 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  re mutexing */. 
24410 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b   int bFullMutex;
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24430 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
24440 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69  able full mutexi
24450 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65  ng */.  int bOpe
24460 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20  nUri;           
24470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24480 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66  e to interpret f
24490 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73  ilenames as URIs
244a0 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69   */.  int bUseCi
244b0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
244c0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63          /* Use c
244d0 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20  overing indices 
244e0 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a  for full-scans *
244f0 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61  /.  int bSmallMa
24500 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  lloc;           
24510 20 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c        /* Avoid l
24520 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  arge memory allo
24530 63 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20  cations if true 
24540 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
24550 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
24560 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
24570 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
24580 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f  */.  int neverCo
24590 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20  rrupt;          
245a0 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
245b0 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  se is always wel
245c0 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e  l-formed */.  in
245d0 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245f0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
24600 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
24610 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
24620 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
24630 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
24640 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
24650 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69  fer count */.  i
24660 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20  nt nStmtSpill;  
24670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24680 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c   /* Stmt-journal
24690 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74   spill-to-disk t
246a0 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71  hreshold */.  sq
246b0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
246c0 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
246d0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
246e0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
246f0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
24700 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
24710 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
24720 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
24730 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
24740 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
24750 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
24760 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
24770 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
24780 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
24790 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
247b0 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
247c0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
247d0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
247e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
247f0 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
24800 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
24810 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
24820 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
24830 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
24840 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69   sizes */.  sqli
24850 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70  te3_int64 szMmap
24860 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
24870 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65   mmap() space pe
24880 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20  r open file */. 
24890 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
248a0 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  xMmap;          
248b0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61     /* Maximum va
248c0 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a  lue for szMmap *
248d0 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
248e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248f0 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
24900 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
24910 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
24920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24930 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
24940 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
24950 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
24960 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24970 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
24980 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
24990 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
249a0 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
249c0 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
249d0 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
249e0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
249f0 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
24a00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
24a10 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
24a20 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
24a30 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20  /.  u32 szPma;  
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a50 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
24a60 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65   Sorter PMA size
24a70 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
24a80 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
24a90 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
24aa0 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
24ab0 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
24ac0 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
24ad0 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
24ae0 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
24af0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
24b00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
24b10 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
24b20 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
24b30 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
24b40 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
24b50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
24b60 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
24b70 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
24b80 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
24b90 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
24ba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
24bb0 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
24bc0 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
24bd0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
24be0 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
24bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24c00 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
24c10 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
24c20 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
24c30 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
24c40 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
24c50 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
24c60 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
24c70 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
24c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24c90 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
24ca0 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
24cb0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
24cc0 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
24cd0 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
24ce0 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
24cf0 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
24d00 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
24d10 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
24d20 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
24d30 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
24d40 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
24d50 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
24d60 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
24d70 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
24d80 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
24d90 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
24da0 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
24db0 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
24dc0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
24dd0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
24de0 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
24df0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
24e00 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
24e10 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
24e20 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
24e30 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
24e40 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
24e50 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
24e60 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
24e70 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
24e80 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
24e90 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
24ea0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
24eb0 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
24ec0 75 6e 73 69 67 6e 65 64 20 69 53 72 63 4c 69 6e  unsigned iSrcLin
24ed0 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d  e,u8 eThis,u8 eM
24ee0 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  x);  /* Callback
24ef0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62   */.  void *pVdb
24f00 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20  eBranchArg;     
24f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f30 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
24f40 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
24f50 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
24f60 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54 65 73  BLE.  int (*xTes
24f70 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b  tCallback)(int);
24f80 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b          /* Invok
24f90 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75  ed by sqlite3Fau
24fa0 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69  ltSim() */.#endi
24fb0 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69  f.  int bLocalti
24fc0 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20  meFault;        
24fd0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
24fe0 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28   fail localtime(
24ff0 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74  ) calls */.  int
25000 20 62 49 6e 74 65 72 6e 61 6c 46 75 6e 63 74 69   bInternalFuncti
25010 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ons;           /
25020 2a 20 49 6e 74 65 72 6e 61 6c 20 53 51 4c 20 66  * Internal SQL f
25030 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 76 69 73  unctions are vis
25040 69 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4f  ible */.  int iO
25050 6e 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c  nceResetThreshol
25060 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  d;          /* W
25070 68 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f  hen to reset OP_
25080 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f  Once counters */
25090 0a 20 20 75 33 32 20 73 7a 53 6f 72 74 65 72 52  .  u32 szSorterR
250a0 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
250b0 20 20 20 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65       /* Min size
250c0 20 69 6e 20 62 79 74 65 73 20 74 6f 20 75 73 65   in bytes to use
250d0 20 73 6f 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a   sorter-refs */.
250e0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
250f0 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
25100 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
25110 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
25120 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
25130 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
25140 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
25150 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
25160 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
25170 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
25180 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
25190 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
251a0 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
251b0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
251c0 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
251d0 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
251e0 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
251f0 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
25200 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
25210 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
25220 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
25230 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
25240 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
25250 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
25260 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
25270 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
25280 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
25290 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
252a0 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
252b0 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
252c0 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
252d0 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
252e0 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
252f0 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
25300 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
25310 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
25320 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
25330 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
25340 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
25350 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
25360 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
25370 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
25380 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
25390 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
253a0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
253b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
253d0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
253e0 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72  */.  int (*xExpr
253f0 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
25400 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f  *, Expr*);     /
25410 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65  * Callback for e
25420 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
25430 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  int (*xSelectCal
25440 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53  lback)(Walker*,S
25450 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c  elect*);  /* Cal
25460 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
25470 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  s */.  void (*xS
25480 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28  electCallback2)(
25490 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
254a0 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62  ;/* Second callb
254b0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
254c0 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
254d0 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
254f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
25500 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65  ueries */.  u8 e
25510 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25530 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c        /* A small
25540 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65   processing code
25550 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
25560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25580 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
25590 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
255a0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
255b0 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
255c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
255d0 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
255e0 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  .    int n;     
255f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25610 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  * A counter */. 
25620 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20     int iCur;    
25630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25640 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25650 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  A cursor number 
25660 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
25670 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25690 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
256a0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
256b0 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
256c0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
256d0 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
256e0 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
256f0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75  /.    struct CCu
25700 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74  rHint *pCCurHint
25710 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25720 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43  /* Used by codeC
25730 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20  ursorHint() */. 
25740 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20     int *aiCol;  
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25770 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20  array of column 
25780 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73  indexes */.    s
25790 74 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a  truct IdxCover *
257a0 70 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20  pIdxCover;      
257b0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63           /* Chec
257c0 6b 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65  k for index cove
257d0 72 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  rage */.    stru
257e0 63 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20  ct IdxExprTrans 
257f0 2a 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20  *pIdxTrans;     
25800 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74        /* Convert
25810 20 69 64 78 65 64 20 65 78 70 72 20 74 6f 20 63   idxed expr to c
25820 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70  olumn */.    Exp
25830 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
25840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25850 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20         /* GROUP 
25860 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
25870 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
25880 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41             /* HA
258a0 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c  VING to WHERE cl
258b0 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 20 20  ause ctx */.    
258c0 73 74 72 75 63 74 20 57 69 6e 64 6f 77 52 65 77  struct WindowRew
258d0 72 69 74 65 20 2a 70 52 65 77 72 69 74 65 3b 20  rite *pRewrite; 
258e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69 6e            /* Win
258f0 64 6f 77 20 72 65 77 72 69 74 65 20 63 6f 6e 74  dow rewrite cont
25900 65 78 74 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ext */.    struc
25910 74 20 57 68 65 72 65 43 6f 6e 73 74 20 2a 70 43  t WhereConst *pC
25920 6f 6e 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  onst;           
25930 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
25940 61 75 73 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a  ause constants *
25950 2f 0a 20 20 20 20 73 74 72 75 63 74 20 52 65 6e  /.    struct Ren
25960 61 6d 65 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b  ameCtx *pRename;
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25980 2f 2a 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e  /* RENAME COLUMN
25990 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20   context */.  } 
259a0 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
259b0 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
259c0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
259d0 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
259e0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
259f0 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
25a00 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
25a10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
25a20 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
25a30 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
25a40 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
25a50 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
25a60 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25a70 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
25a80 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
25a90 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
25aa0 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57  e3ExprWalkNoop(W
25ab0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
25ac0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
25ad0 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72  tWalkNoop(Walker
25ae0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
25af0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
25b00 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20  lkFail(Walker*, 
25b10 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66  Select*);.#ifdef
25b20 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f   SQLITE_DEBUG.vo
25b30 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
25b40 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b  WalkAssert2(Walk
25b50 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23  er*, Select*);.#
25b60 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
25b70 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
25b80 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
25b90 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
25ba0 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
25bb0 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
25bc0 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
25bd0 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
25be0 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
25bf0 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
25c00 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
25c10 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
25c20 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
25c30 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
25c40 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
25c50 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
25c60 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
25c70 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
25c80 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
25c90 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
25ca0 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ure represents a
25cb0 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d   set of one or m
25cc0 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d  ore CTEs.** (com
25cd0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
25ce0 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62  sions) created b
25cf0 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20  y a single WITH 
25d00 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
25d10 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e  t With {.  int n
25d20 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cte;            
25d30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
25d40 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20  mber of CTEs in 
25d50 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  the WITH clause 
25d60 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65  */.  With *pOute
25d70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
25d80 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69       /* Containi
25d90 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  ng WITH clause, 
25da0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72  or NULL */.  str
25db0 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20  uct Cte {       
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25dd0 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20  For each CTE in 
25de0 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  the WITH clause.
25df0 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ... */.    char 
25e00 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
25e10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
25e20 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  me of this CTE *
25e30 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
25e40 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  pCols;          
25e50 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
25e60 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
25e70 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
25e80 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
25e90 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
25ea0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
25eb0 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73  finition of this
25ec0 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73   CTE */.    cons
25ed0 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b  t char *zCteErr;
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
25ef0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
25f00 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65   circular refere
25f10 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  nces */.  } a[1]
25f20 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ;.};..#ifdef SQL
25f30 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
25f40 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
25f50 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65  he TreeView obje
25f60 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70  ct is used for p
25f70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74  rinting the cont
25f80 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73  ent of.** data s
25f90 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c  tructures on sql
25fa0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
25fb0 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c  ) using a tree-l
25fc0 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72  ike view..*/.str
25fd0 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20  uct TreeView {. 
25fe0 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
25ff0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
26000 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74  h level of the t
26010 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f  ree we are on */
26020 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30  .  u8  bLine[100
26030 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  ];         /* Dr
26040 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63  aw vertical in c
26050 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65  olumn i if bLine
26060 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d  [i] is true */.}
26070 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
26080 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a  TE_DEBUG */../*.
26090 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69  ** This object i
260a0 73 20 75 73 65 64 20 69 6e 20 76 61 72 69 6f 69  s used in varioi
260b0 75 73 20 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c  us ways, all rel
260c0 61 74 65 64 20 74 6f 20 77 69 6e 64 6f 77 20 66  ated to window f
260d0 75 6e 63 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20  unctions.**.**  
260e0 20 28 31 29 20 41 20 73 69 6e 67 6c 65 20 69 6e   (1) A single in
260f0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
26100 74 72 75 63 74 75 72 65 20 69 73 20 61 74 74 61  tructure is atta
26110 63 68 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20  ched to the.**  
26120 20 20 20 20 20 74 68 65 20 45 78 70 72 2e 70 57       the Expr.pW
26130 69 6e 20 66 69 65 6c 64 20 66 6f 72 20 65 61 63  in field for eac
26140 68 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  h window functio
26150 6e 20 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69  n in an expressi
26160 6f 6e 20 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20  on tree..**     
26170 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f    This object ho
26180 6c 64 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74  lds the informat
26190 69 6f 6e 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ion contained in
261a0 20 74 68 65 20 4f 56 45 52 20 63 6c 61 75 73 65   the OVER clause
261b0 2c 0a 2a 2a 20 20 20 20 20 20 20 70 6c 75 73 20  ,.**       plus 
261c0 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64  additional field
261d0 73 20 75 73 65 64 20 64 75 72 69 6e 67 20 63 6f  s used during co
261e0 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a  de generation..*
261f0 2a 0a 2a 2a 20 20 20 28 32 29 20 41 6c 6c 20 77  *.**   (2) All w
26200 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
26210 69 6e 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  in a single SELE
26220 43 54 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  CT form a linked
26230 2d 6c 69 73 74 0a 2a 2a 20 20 20 20 20 20 20 61  -list.**       a
26240 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63  ttached to Selec
26250 74 2e 70 57 69 6e 2e 20 20 54 68 65 20 57 69 6e  t.pWin.  The Win
26260 64 6f 77 2e 70 46 75 6e 63 20 61 6e 64 20 57 69  dow.pFunc and Wi
26270 6e 64 6f 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20  ndow.pExpr.**   
26280 20 20 20 20 66 69 65 6c 64 73 20 70 6f 69 6e 74      fields point
26290 20 62 61 63 6b 20 74 6f 20 74 68 65 20 65 78 70   back to the exp
262a0 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
262b0 74 68 65 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  the window funct
262c0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29  ion..**.**   (3)
262d0 20 54 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68   The terms of th
262e0 65 20 57 49 4e 44 4f 57 20 63 6c 61 75 73 65 20  e WINDOW clause 
262f0 6f 66 20 61 20 53 45 4c 45 43 54 20 61 72 65 20  of a SELECT are 
26300 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 74 68 69  instances of thi
26310 73 0a 2a 2a 20 20 20 20 20 20 20 6f 62 6a 65 63  s.**       objec
26320 74 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  t on a linked li
26330 73 74 20 61 74 74 61 63 68 65 64 20 74 6f 20 53  st attached to S
26340 65 6c 65 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a  elect.pWinDefn..
26350 2a 2a 0a 2a 2a 20 54 68 65 20 75 73 65 73 20 28  **.** The uses (
26360 31 29 20 61 6e 64 20 28 32 29 20 61 72 65 20 72  1) and (2) are r
26370 65 61 6c 6c 79 20 74 68 65 20 73 61 6d 65 20 57  eally the same W
26380 69 6e 64 6f 77 20 6f 62 6a 65 63 74 20 74 68 61  indow object tha
26390 74 20 6a 75 73 74 20 68 61 70 70 65 6e 73 0a 2a  t just happens.*
263a0 2a 20 74 6f 20 62 65 20 61 63 63 65 73 73 69 62  * to be accessib
263b0 6c 65 20 69 6e 20 74 77 6f 20 64 69 66 66 65 72  le in two differ
263c0 65 6e 74 20 77 61 79 73 2e 20 20 55 73 65 20 28  ent ways.  Use (
263d0 33 29 20 69 73 20 61 72 65 20 73 65 70 61 72 61  3) is are separa
263e0 74 65 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73  te objects..*/.s
263f0 74 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20  truct Window {. 
26400 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
26410 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
26420 20 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20   of window (may 
26430 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78  be NULL) */.  Ex
26440 70 72 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69  prList *pPartiti
26450 6f 6e 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49  on;   /* PARTITI
26460 4f 4e 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ON BY clause */.
26470 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
26480 65 72 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44  erBy;     /* ORD
26490 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
264a0 20 20 75 38 20 65 54 79 70 65 3b 20 20 20 20 20    u8 eType;     
264b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
264c0 52 41 4e 47 45 20 6f 72 20 54 4b 5f 52 4f 57 53  RANGE or TK_ROWS
264d0 20 2a 2f 0a 20 20 75 38 20 65 53 74 61 72 74 3b   */.  u8 eStart;
264e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
264f0 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52   UNBOUNDED, CURR
26500 45 4e 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f  ENT, PRECEDING o
26510 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20  r FOLLOWING */. 
26520 20 75 38 20 65 45 6e 64 3b 20 20 20 20 20 20 20   u8 eEnd;       
26530 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f           /* UNBO
26540 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20  UNDED, CURRENT, 
26550 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c  PRECEDING or FOL
26560 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72  LOWING */.  Expr
26570 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
26580 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
26590 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52  n for "<expr> PR
265a0 45 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78  ECEDING" */.  Ex
265b0 70 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  pr *pEnd;       
265c0 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
265d0 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20  ion for "<expr> 
265e0 46 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20  FOLLOWING" */.  
265f0 57 69 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e  Window *pNextWin
26600 3b 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  ;       /* Next 
26610 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20  window function 
26620 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69  belonging to thi
26630 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78  s SELECT */.  Ex
26640 70 72 20 2a 70 46 69 6c 74 65 72 3b 20 20 20 20  pr *pFilter;    
26650 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 49 4c        /* The FIL
26660 54 45 52 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  TER expression *
26670 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75  /.  FuncDef *pFu
26680 6e 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  nc;         /* T
26690 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
266a0 20 69 6e 74 20 69 45 70 68 43 73 72 3b 20 20 20   int iEphCsr;   
266b0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74           /* Part
266c0 69 74 69 6f 6e 20 62 75 66 66 65 72 20 6f 72 20  ition buffer or 
266d0 50 65 65 72 20 62 75 66 66 65 72 20 2a 2f 0a 20  Peer buffer */. 
266e0 20 69 6e 74 20 72 65 67 41 63 63 75 6d 3b 0a 20   int regAccum;. 
266f0 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 0a   int regResult;.
26700 20 20 69 6e 74 20 63 73 72 41 70 70 3b 20 20 20    int csrApp;   
26710 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e            /* Fun
26720 63 74 69 6f 6e 20 63 75 72 73 6f 72 20 28 75 73  ction cursor (us
26730 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a  ed by min/max) *
26740 2f 0a 20 20 69 6e 74 20 72 65 67 41 70 70 3b 20  /.  int regApp; 
26750 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
26760 75 6e 63 74 69 6f 6e 20 72 65 67 69 73 74 65 72  unction register
26770 20 28 61 6c 73 6f 20 75 73 65 64 20 62 79 20 6d   (also used by m
26780 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74  in/max) */.  int
26790 20 72 65 67 50 61 72 74 3b 20 20 20 20 20 20 20   regPart;       
267a0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 69 6e       /* First in
267b0 20 61 20 73 65 74 20 6f 66 20 72 65 67 69 73 74   a set of regist
267c0 65 72 73 20 68 6f 6c 64 69 6e 67 20 50 41 52 54  ers holding PART
267d0 49 54 49 4f 4e 20 42 59 0a 20 20 20 20 20 20 20  ITION BY.       
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267f0 20 20 20 2a 2a 20 61 6e 64 20 4f 52 44 45 52 20     ** and ORDER 
26800 42 59 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  BY values for th
26810 65 20 77 69 6e 64 6f 77 20 2a 2f 0a 20 20 45 78  e window */.  Ex
26820 70 72 20 2a 70 4f 77 6e 65 72 3b 20 20 20 20 20  pr *pOwner;     
26830 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
26840 69 6f 6e 20 6f 62 6a 65 63 74 20 74 68 69 73 20  ion object this 
26850 77 69 6e 64 6f 77 20 69 73 20 61 74 74 61 63 68  window is attach
26860 65 64 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e  ed to */.  int n
26870 42 75 66 66 65 72 43 6f 6c 3b 20 20 20 20 20 20  BufferCol;      
26880 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
26890 63 6f 6c 75 6d 6e 73 20 69 6e 20 62 75 66 66 65  columns in buffe
268a0 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  r table */.  int
268b0 20 69 41 72 67 43 6f 6c 3b 20 20 20 20 20 20 20   iArgCol;       
268c0 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 6f       /* Offset o
268d0 66 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  f first argument
268e0 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69   for this functi
268f0 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65  on */.};..#ifnde
26900 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
26910 4e 44 4f 57 46 55 4e 43 0a 76 6f 69 64 20 73 71  NDOWFUNC.void sq
26920 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74  lite3WindowDelet
26930 65 28 73 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64  e(sqlite3*, Wind
26940 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ow*);.void sqlit
26950 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65  e3WindowListDele
26960 74 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  te(sqlite3 *db, 
26970 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64  Window *p);.Wind
26980 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
26990 77 41 6c 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69  wAlloc(Parse*, i
269a0 6e 74 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  nt, int, Expr*, 
269b0 69 6e 74 20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  int , Expr*);.vo
269c0 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
269d0 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
269e0 78 70 72 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a  xpr*, Window*);.
269f0 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  int sqlite3Windo
26a00 77 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c  wCompare(Parse*,
26a10 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77   Window*, Window
26a20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26a30 57 69 6e 64 6f 77 43 6f 64 65 49 6e 69 74 28 50  WindowCodeInit(P
26a40 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  arse*, Window*);
26a50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
26a60 64 6f 77 43 6f 64 65 53 74 65 70 28 50 61 72 73  dowCodeStep(Pars
26a70 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 57 68 65  e*, Select*, Whe
26a80 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e  reInfo*, int, in
26a90 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  t);.int sqlite3W
26aa0 69 6e 64 6f 77 52 65 77 72 69 74 65 28 50 61 72  indowRewrite(Par
26ab0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  se*, Select*);.i
26ac0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 61 6e 64  nt sqlite3Expand
26ad0 53 75 62 71 75 65 72 79 28 50 61 72 73 65 2a 2c  Subquery(Parse*,
26ae0 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
26af0 69 74 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  item*);.void sql
26b00 69 74 65 33 57 69 6e 64 6f 77 55 70 64 61 74 65  ite3WindowUpdate
26b10 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a  (Parse*, Window*
26b20 2c 20 57 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44  , Window*, FuncD
26b30 65 66 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71  ef*);.Window *sq
26b40 6c 69 74 65 33 57 69 6e 64 6f 77 44 75 70 28 73  lite3WindowDup(s
26b50 71 6c 69 74 65 33 20 2a 64 62 2c 20 45 78 70 72  qlite3 *db, Expr
26b60 20 2a 70 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77   *pOwner, Window
26b70 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71   *p);.Window *sq
26b80 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74 44  lite3WindowListD
26b90 75 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  up(sqlite3 *db, 
26ba0 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64  Window *p);.void
26bb0 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75   sqlite3WindowFu
26bc0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 23  nctions(void);.#
26bd0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
26be0 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74  lite3WindowDelet
26bf0 65 28 61 2c 62 29 0a 23 20 64 65 66 69 6e 65 20  e(a,b).# define 
26c00 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e  sqlite3WindowFun
26c10 63 74 69 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e  ctions().# defin
26c20 65 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41  e sqlite3WindowA
26c30 74 74 61 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e  ttach(a,b,c).#en
26c40 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d  dif../*.** Assum
26c50 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74  ing zIn points t
26c60 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
26c70 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72   of a UTF-8 char
26c80 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63  acter,.** advanc
26c90 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74  e zIn to point t
26ca0 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
26cb0 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46   of the next UTF
26cc0 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f  -8 character..*/
26cd0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
26ce0 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b  SKIP_UTF8(zIn) {
26cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d00 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20          \.  if( 
26d10 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30  (*(zIn++))>=0xc0
26d20 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
26d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d40 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a   \.    while( (*
26d50 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38  zIn & 0xc0)==0x8
26d60 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20  0 ){ zIn++; }   
26d70 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20            \.  } 
26d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26db0 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68     \.}../*.** Th
26dc0 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20  e SQLITE_*_BKPT 
26dd0 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74  macros are subst
26de0 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65  itutes for the e
26df0 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a  rror codes with.
26e00 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ** the same name
26e10 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65   but without the
26e20 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20   _BKPT suffix.  
26e30 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76  These macros inv
26e40 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  oke.** routines 
26e50 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20  that report the 
26e60 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77  line-number on w
26e70 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f  hich the error o
26e80 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69  riginated.** usi
26e90 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  ng sqlite3_log()
26ea0 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20  .  The routines 
26eb0 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63  also provide a c
26ec0 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a  onvenient place.
26ed0 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75  ** to set a debu
26ee0 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e  gger breakpoint.
26ef0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  .*/.int sqlite3R
26f00 65 70 6f 72 74 45 72 72 6f 72 28 69 6e 74 20 69  eportError(int i
26f10 45 72 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c  Err, int lineno,
26f20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
26f30 70 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pe);.int sqlite3
26f40 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
26f50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
26f60 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
26f70 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
26f80 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
26f90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
26fa0 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
26fb0 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
26fc0 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
26fd0 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
26fe0 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
26ff0 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
27000 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
27010 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
27020 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
27030 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66  or(__LINE__).#if
27040 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
27050 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f  .  int sqlite3No
27060 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
27070 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72   int sqlite3Ioer
27080 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29  rnomemError(int)
27090 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  ;.  int sqlite3C
270a0 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28  orruptPgnoError(
270b0 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66  int,Pgno);.# def
270c0 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
270d0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d  _BKPT sqlite3Nom
270e0 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
270f0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
27100 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b  E_IOERR_NOMEM_BK
27110 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e  PT sqlite3Ioerrn
27120 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  omemError(__LINE
27130 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  __).# define SQL
27140 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f  ITE_CORRUPT_PGNO
27150 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75  (P) sqlite3Corru
27160 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49  ptPgnoError(__LI
27170 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a  NE__,(P)).#else.
27180 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
27190 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54  NOMEM_BKPT SQLIT
271a0 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65  E_NOMEM.# define
271b0 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
271c0 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
271d0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65  IOERR_NOMEM.# de
271e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
271f0 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69  UPT_PGNO(P) sqli
27200 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
27210 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66  __LINE__).#endif
27220 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64  ../*.** FTS3 and
27230 20 46 54 53 34 20 62 6f 74 68 20 72 65 71 75 69   FTS4 both requi
27240 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  re virtual table
27250 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20   support.*/.#if 
27260 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
27270 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
27280 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
27290 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75  _ENABLE_FTS3.# u
272a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
272b0 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a  LE_FTS4.#endif..
272c0 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
272d0 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
272e0 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
272f0 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
27300 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
27310 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
27320 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
27330 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
27340 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  o call.** the SQ
27350 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
27360 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
27370 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  as an alias for 
27380 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
27390 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
273a0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
273b0 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
273c0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
273d0 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
273e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
273f0 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  S3 1.#endif../*.
27400 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
27410 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
27420 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
27430 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
27440 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
27450 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
27460 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
27470 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
27480 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
27490 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
274a0 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
274b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
274c0 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
274d0 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
274e0 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
274f0 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
27500 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
27510 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
27520 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
27530 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
27540 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
27550 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
27560 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
27570 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
27580 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
27590 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
275a0 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
275b0 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
275c0 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
275d0 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
275e0 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
275f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27600 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
27610 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
27620 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
27630 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
27640 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
27650 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
27660 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
27670 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
27680 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
27690 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
276a0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
276b0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
276c0 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
276d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
276e0 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
276f0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
27700 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
27710 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
27720 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
27730 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
27740 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
27750 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
27760 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
27770 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
27780 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
27790 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
277a0 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
277b0 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
277c0 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
277d0 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
277e0 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20  ed char)(x)]).# 
277f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
27800 71 75 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69  quote(x)   (sqli
27810 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
27820 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
27830 30 78 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  0x80).#else.# de
27840 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
27850 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
27860 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
27870 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
27880 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
27890 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
278a0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
278b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
278c0 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
278d0 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
278e0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
278f0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
27900 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
27910 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
27920 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27930 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
27940 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
27950 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
27960 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
27970 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
27980 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27990 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
279a0 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
279b0 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
279c0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
279d0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75  fine sqlite3Isqu
279e0 6f 74 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27  ote(x)   ((x)=='
279f0 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28  "'||(x)=='\''||(
27a00 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60  x)=='['||(x)=='`
27a10 27 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  ').#endif.int sq
27a20 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
27a30 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  );../*.** Intern
27a40 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
27a50 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71  otypes.*/.int sq
27a60 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e  lite3StrICmp(con
27a70 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
27a80 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
27a90 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
27aa0 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
27ab0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
27ac0 4e 4e 28 43 29 20 28 73 74 72 6c 65 6e 28 43 29  NN(C) (strlen(C)
27ad0 26 30 78 33 66 66 66 66 66 66 66 29 0a 63 68 61  &0x3fffffff).cha
27ae0 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  r *sqlite3Column
27af0 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61  Type(Column*,cha
27b00 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
27b10 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c  ite3StrNICmp sql
27b20 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69  ite3_strnicmp..i
27b30 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
27b40 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  Init(void);.void
27b50 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e   sqlite3MallocEn
27b60 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73  d(void);.void *s
27b70 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34  qlite3Malloc(u64
27b80 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
27b90 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b  MallocZero(u64);
27ba0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
27bb0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74  MallocZero(sqlit
27bc0 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
27bd0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
27be0 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  Raw(sqlite3*, u6
27bf0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
27c00 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73  3DbMallocRawNN(s
27c10 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63  qlite3*, u64);.c
27c20 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
27c30 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  rDup(sqlite3*,co
27c40 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
27c50 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44   *sqlite3DbStrND
27c60 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
27c70 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63  t char*, u64);.c
27c80 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 70  har *sqlite3DbSp
27c90 61 6e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  anDup(sqlite3*,c
27ca0 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
27cb0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73   char*);.void *s
27cc0 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
27cd0 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  id*, u64);.void 
27ce0 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
27cf0 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
27d00 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
27d10 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
27d20 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
27d30 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
27d40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
27d50 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
27d60 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
27d70 65 33 44 62 46 72 65 65 4e 4e 28 73 71 6c 69 74  e3DbFreeNN(sqlit
27d80 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74  e3*, void*);.int
27d90 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69   sqlite3MallocSi
27da0 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  ze(void*);.int s
27db0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69  qlite3DbMallocSi
27dc0 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ze(sqlite3*, voi
27dd0 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
27de0 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74  e3PageMalloc(int
27df0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
27e00 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  ageFree(void*);.
27e10 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53  void sqlite3MemS
27e20 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b  etDefault(void);
27e30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27e40 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20  UNTESTABLE.void 
27e50 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c  sqlite3BenignMal
27e60 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a  locHooks(void (*
27e70 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a  )(void), void (*
27e80 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66  )(void));.#endif
27e90 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70  .int sqlite3Heap
27ea0 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29  NearlyFull(void)
27eb0 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74  ;../*.** On syst
27ec0 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73  ems with ample s
27ed0 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74  tack space and t
27ee0 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f  hat support allo
27ef0 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73  ca(), make.** us
27f00 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f  e of alloca() to
27f10 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f   obtain space fo
27f20 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69  r large automati
27f30 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64  c objects.  By d
27f40 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69  efault,.** obtai
27f50 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c  n space from mal
27f60 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  loc()..**.** The
27f70 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e   alloca() routin
27f80 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20  e never returns 
27f90 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c  NULL.  This will
27fa0 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68   cause code path
27fb0 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77  s.** that deal w
27fc0 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ith sqlite3Stack
27fd0 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73  Alloc() failures
27fe0 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62   to be unreachab
27ff0 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
28000 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a  LITE_USE_ALLOCA.
28010 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28020 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
28030 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23  N)   alloca(N).#
28040 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
28050 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
28060 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63  N)  memset(alloc
28070 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65  a(N), 0, N).# de
28080 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
28090 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65  kFree(D,P).#else
280a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
280b0 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
280c0 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  ,N)   sqlite3DbM
280d0 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20  allocRaw(D,N).# 
280e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
280f0 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
28100 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  )  sqlite3DbMall
28110 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65  ocZero(D,N).# de
28120 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
28130 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
28140 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44   sqlite3DbFree(D
28150 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ,P).#endif../* D
28160 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68  o not allow both
28170 20 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d   MEMSYS5 and MEM
28180 53 59 53 33 20 74 6f 20 62 65 20 64 65 66 69 6e  SYS3 to be defin
28190 65 64 20 74 6f 67 65 74 68 65 72 2e 20 20 49 66  ed together.  If
281a0 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69   they.** are, di
281b0 73 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f  sable MEMSYS3.*/
281c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
281d0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f  NABLE_MEMSYS5.co
281e0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
281f0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
28200 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f  MemGetMemsys5(vo
28210 69 64 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49  id);.#undef SQLI
28220 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
28230 33 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  3.#endif.#ifdef 
28240 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
28250 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS3.const sqli
28260 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
28270 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
28280 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e  msys3(void);.#en
28290 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
282a0 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
282b0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
282c0 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
282d0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
282e0 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
282f0 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
28300 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
28310 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
28320 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
28330 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
28340 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
28350 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
28360 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
28370 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
28380 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  id);.#endif.#if 
28390 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
283a0 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21  MUTEX_OMIT) && !
283b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
283c0 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69  UTEX_NOOP).  voi
283d0 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42  d sqlite3MemoryB
283e0 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65  arrier(void);.#e
283f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
28400 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
28410 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69  r().#endif..sqli
28420 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
28430 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74  3StatusValue(int
28440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
28450 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74  tatusUp(int, int
28460 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
28470 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69  tatusDown(int, i
28480 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28490 33 53 74 61 74 75 73 48 69 67 68 77 61 74 65 72  3StatusHighwater
284a0 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  (int, int);.int 
284b0 73 71 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65  sqlite3Lookaside
284c0 55 73 65 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Used(sqlite3*,in
284d0 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20  t*);../* Access 
284e0 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20  to mutexes used 
284f0 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75  by sqlite3_statu
28500 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d  s() */.sqlite3_m
28510 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61  utex *sqlite3Pca
28520 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b  che1Mutex(void);
28530 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
28540 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74  sqlite3MallocMut
28550 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64  ex(void);..#if d
28560 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
28570 41 42 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41 44  ABLE_MULTITHREAD
28580 45 44 5f 43 48 45 43 4b 53 29 20 26 26 20 21 64  ED_CHECKS) && !d
28590 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
285a0 54 45 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73  TEX_OMIT).void s
285b0 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f  qlite3MutexWarnO
285c0 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69  nContention(sqli
285d0 74 65 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c  te3_mutex*);.#el
285e0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
285f0 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f  te3MutexWarnOnCo
28600 6e 74 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64  ntention(x).#end
28610 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
28620 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
28630 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c  _POINT.  int sql
28640 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
28650 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
28660 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58  e sqlite3IsNaN(X
28670 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )  0.#endif../*.
28680 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
28690 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
286a0 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
286b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
286c0 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f  t SQL.** functio
286d0 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  ns arguments tha
286e0 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65  t are the parame
286f0 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e  ters to the prin
28700 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  tf() function..*
28710 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41  /.struct PrintfA
28720 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74  rguments {.  int
28730 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
28740 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e        /* Total n
28750 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
28760 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65  ts */.  int nUse
28770 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
28780 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
28790 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20  guments used so 
287a0 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  far */.  sqlite3
287b0 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20  _value **apArg; 
287c0 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e    /* The argumen
287d0 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  t values */.};..
287e0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72  char *sqlite3MPr
287f0 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
28800 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
28810 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d  .char *sqlite3VM
28820 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
28830 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
28840 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e  list);.#if defin
28850 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
28860 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
28870 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
28880 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
28890 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73  DebugPrintf(cons
288a0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
288b0 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
288c0 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
288d0 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65   void *sqlite3Te
288e0 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  stTextToPtr(cons
288f0 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
28900 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
28910 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f  LITE_DEBUG).  vo
28920 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
28930 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a  ewExpr(TreeView*
28940 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75  , const Expr*, u
28950 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
28960 65 33 54 72 65 65 56 69 65 77 42 61 72 65 45 78  e3TreeViewBareEx
28970 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a  prList(TreeView*
28980 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  , const ExprList
28990 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
289a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
289b0 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28  reeViewExprList(
289c0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
289d0 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20   ExprList*, u8, 
289e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
289f0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
28a00 56 69 65 77 53 72 63 4c 69 73 74 28 54 72 65 65  ViewSrcList(Tree
28a10 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 72 63  View*, const Src
28a20 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  List*);.  void s
28a30 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65  qlite3TreeViewSe
28a40 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20  lect(TreeView*, 
28a50 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75  const Select*, u
28a60 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
28a70 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54  e3TreeViewWith(T
28a80 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
28a90 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 69 66 6e  With*, u8);.#ifn
28aa0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
28ab0 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 76 6f 69  WINDOWFUNC.  voi
28ac0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
28ad0 77 57 69 6e 64 6f 77 28 54 72 65 65 56 69 65 77  wWindow(TreeView
28ae0 2a 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a  *, const Window*
28af0 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
28b00 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 6e  lite3TreeViewWin
28b10 46 75 6e 63 28 54 72 65 65 56 69 65 77 2a 2c 20  Func(TreeView*, 
28b20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75  const Window*, u
28b30 38 29 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  8);.#endif.#endi
28b40 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
28b50 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
28b60 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
28b70 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
28b80 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
28b90 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
28ba0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
28bb0 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
28bc0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
28bd0 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b  te3TokenInit(Tok
28be0 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20  en*,char*);.int 
28bf0 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f  sqlite3KeywordCo
28c00 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  de(const unsigne
28c10 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  d char*, int);.i
28c20 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72  nt sqlite3RunPar
28c30 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ser(Parse*, cons
28c40 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a  t char*, char **
28c50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
28c60 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73  inishCoding(Pars
28c70 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
28c80 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65  GetTempReg(Parse
28c90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28ca0 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50  ReleaseTempReg(P
28cb0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
28cc0 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61  sqlite3GetTempRa
28cd0 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  nge(Parse*,int);
28ce0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
28cf0 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61  easeTempRange(Pa
28d00 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  rse*,int,int);.v
28d10 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72  oid sqlite3Clear
28d20 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72  TempRegCache(Par
28d30 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  se*);.#ifdef SQL
28d40 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
28d50 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61  lite3NoTempsInRa
28d60 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
28d70 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72  nt);.#endif.Expr
28d80 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c   *sqlite3ExprAll
28d90 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
28da0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74  const Token*,int
28db0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
28dc0 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Expr(sqlite3*,in
28dd0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
28de0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28df0 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73  AttachSubtrees(s
28e00 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78  qlite3*,Expr*,Ex
28e10 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
28e20 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50   *sqlite3PExpr(P
28e30 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
28e40 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
28e50 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64 53  sqlite3PExprAddS
28e60 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78  elect(Parse*, Ex
28e70 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45  pr*, Select*);.E
28e80 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
28e90 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  And(sqlite3*,Exp
28ea0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  r*, Expr*);.Expr
28eb0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e   *sqlite3ExprFun
28ec0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70  ction(Parse*,Exp
28ed0 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
28ee0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28ef0 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e  e3ExprAssignVarN
28f00 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78  umber(Parse*, Ex
28f10 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  pr*, u32);.void 
28f20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74  sqlite3ExprDelet
28f30 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
28f40 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
28f50 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
28f60 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  end(Parse*,ExprL
28f70 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  ist*,Expr*);.Exp
28f80 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
28f90 70 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63 74  prListAppendVect
28fa0 6f 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  or(Parse*,ExprLi
28fb0 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72  st*,IdList*,Expr
28fc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28fd0 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f  ExprListSetSortO
28fe0 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69  rder(ExprList*,i
28ff0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29000 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65  3ExprListSetName
29010 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
29020 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
29030 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
29040 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65  istSetSpan(Parse
29050 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73  *,ExprList*,cons
29060 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
29070 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
29080 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65  e3ExprListDelete
29090 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c  (sqlite3*, ExprL
290a0 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  ist*);.u32 sqlit
290b0 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28  e3ExprListFlags(
290c0 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29  const ExprList*)
290d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
290e0 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  t(sqlite3*, char
290f0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
29100 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69  InitCallback(voi
29110 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c  d*, int, char**,
29120 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71   char**);.int sq
29130 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 73 71 6c  lite3InitOne(sql
29140 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 68 61 72  ite3*, int, char
29150 2a 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  **, u32);.void s
29160 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72  qlite3Pragma(Par
29170 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
29180 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23  *,Token*,int);.#
29190 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
291a0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
291b0 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50  Module *sqlite3P
291c0 72 61 67 6d 61 56 74 61 62 52 65 67 69 73 74 65  ragmaVtabRegiste
291d0 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  r(sqlite3*,const
291e0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23   char *zName);.#
291f0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
29200 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
29210 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71  sOfConnection(sq
29220 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
29230 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
29240 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ema(sqlite3*,int
29250 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
29260 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41  ollapseDatabaseA
29270 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a  rray(sqlite3*);.
29280 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
29290 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  itInternalChange
292a0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  s(sqlite3*);.voi
292b0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43  d sqlite3DeleteC
292c0 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74  olumnNames(sqlit
292d0 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74  e3*,Table*);.int
292e0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46   sqlite3ColumnsF
292f0 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73  romExprList(Pars
29300 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36  e*,ExprList*,i16
29310 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69  *,Column**);.voi
29320 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41  d sqlite3SelectA
29330 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43  ddColumnTypeAndC
29340 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  ollation(Parse*,
29350 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Table*,Select*);
29360 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52  .Table *sqlite3R
29370 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74  esultSetOfSelect
29380 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29  (Parse*,Select*)
29390 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
293a0 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61  enMasterTable(Pa
293b0 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64  rse *, int);.Ind
293c0 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61  ex *sqlite3Prima
293d0 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65  ryKeyIndex(Table
293e0 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43  *);.i16 sqlite3C
293f0 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64  olumnOfIndex(Ind
29400 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20  ex*, i16);.void 
29410 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c  sqlite3StartTabl
29420 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
29430 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Token*,int,int,i
29440 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c  nt,int);.#if SQL
29450 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
29460 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64  N_COLUMNS.  void
29470 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
29480 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
29490 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a  (Table*, Column*
294a0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
294b0 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50  e sqlite3ColumnP
294c0 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d  ropertiesFromNam
294d0 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20  e(T,C) /* no-op 
294e0 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  */.#endif.void s
294f0 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28  qlite3AddColumn(
29500 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
29510 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
29520 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61  te3AddNotNull(Pa
29530 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
29540 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61   sqlite3AddPrima
29550 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  ryKey(Parse*, Ex
29560 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
29570 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
29580 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e  lite3AddCheckCon
29590 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
295a0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
295b0 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61  ite3AddDefaultVa
295c0 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  lue(Parse*,Expr*
295d0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
295e0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
295f0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
29600 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
29610 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
29620 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
29630 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
29640 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  ,u8,Select*);.in
29650 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  t sqlite3ParseUr
29660 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  i(const char*,co
29670 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e  nst char*,unsign
29680 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20  ed int*,.       
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
296a0 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a  ite3_vfs**,char*
296b0 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65  *,char **);.Btre
296c0 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
296d0 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
296e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a  ,const char*);..
296f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  #ifdef SQLITE_UN
29700 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e  TESTABLE.# defin
29710 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  e sqlite3FaultSi
29720 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  m(X) SQLITE_OK.#
29730 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74  else.  int sqlit
29740 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b  e3FaultSim(int);
29750 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20  .#endif..Bitvec 
29760 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
29770 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
29780 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
29790 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
297a0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
297b0 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74  cTestNotNull(Bit
297c0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
297d0 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
297e0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
297f0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
29800 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
29810 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f   u32, void*);.vo
29820 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
29830 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29  Destroy(Bitvec*)
29840 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74  ;.u32 sqlite3Bit
29850 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29  vecSize(Bitvec*)
29860 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
29870 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20  _UNTESTABLE.int 
29880 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69  sqlite3BitvecBui
29890 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74  ltinTest(int,int
298a0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53  *);.#endif..RowS
298b0 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65  et *sqlite3RowSe
298c0 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b  tInit(sqlite3*);
298d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
298e0 53 65 74 44 65 6c 65 74 65 28 76 6f 69 64 2a 29  SetDelete(void*)
298f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
29900 77 53 65 74 43 6c 65 61 72 28 76 6f 69 64 2a 29  wSetClear(void*)
29910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
29920 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
29930 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
29940 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
29950 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
29960 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
29970 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
29980 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
29990 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
299a0 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
299b0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
299c0 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
299d0 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
299e0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
299f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
29a00 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
29a10 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
29a20 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
29a30 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
29a40 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
29a50 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
29a60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
29a70 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
29a80 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23  A,B) 0.#endif..#
29a90 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
29aa0 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20  TACHED>30.  int 
29ab0 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
29ac0 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23  Zero(yDbMask);.#
29ad0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
29ae0 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  e3DropTable(Pars
29af0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
29b00 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
29b10 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62  lite3CodeDropTab
29b20 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  le(Parse*, Table
29b30 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
29b40 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
29b50 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
29b60 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
29b70 6c 69 74 65 33 46 72 65 65 49 6e 64 65 78 28 73  lite3FreeIndex(s
29b80 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29  qlite3*, Index*)
29b90 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
29ba0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
29bb0 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
29bc0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
29bd0 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
29be0 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
29bf0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
29c00 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
29c10 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
29c20 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
29c30 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
29c40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29c50 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
29c60 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  (X).#endif.void 
29c70 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
29c80 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
29c90 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
29ca0 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a 29 3b  , int, Upsert*);
29cb0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72  .void *sqlite3Ar
29cc0 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69  rayAllocate(sqli
29cd0 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69  te3*,void*,int,i
29ce0 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73  nt*,int*);.IdLis
29cf0 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
29d00 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 20 49  Append(Parse*, I
29d10 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  dList*, Token*);
29d20 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69  .int sqlite3IdLi
29d30 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c  stIndex(IdList*,
29d40 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72  const char*);.Sr
29d50 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
29d60 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c  cListEnlarge(sql
29d70 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
29d80 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c   int, int);.SrcL
29d90 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
29da0 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
29db0 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  3*, SrcList*, To
29dc0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53  ken*, Token*);.S
29dd0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
29de0 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d  rcListAppendFrom
29df0 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  Term(Parse*, Src
29e00 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
29e10 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
29e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e30 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b               Tok
29e40 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  en*, Select*, Ex
29e50 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  pr*, IdList*);.v
29e60 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
29e70 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73  stIndexedBy(Pars
29e80 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  e *, SrcList *, 
29e90 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
29ea0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e  qlite3SrcListFun
29eb0 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72  cArgs(Parse*, Sr
29ec0 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
29ed0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
29ee0 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50  ndexedByLookup(P
29ef0 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53  arse *, struct S
29f00 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
29f10 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
29f20 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
29f30 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  (SrcList*);.void
29f40 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41   sqlite3SrcListA
29f50 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72  ssignCursors(Par
29f60 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
29f70 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69  void sqlite3IdLi
29f80 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
29f90 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
29fa0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
29fb0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
29fc0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65   SrcList*);.Inde
29fd0 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61  x *sqlite3Alloca
29fe0 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71  teIndexObject(sq
29ff0 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63  lite3*,i16,int,c
2a000 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
2a010 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28  ite3CreateIndex(
2a020 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
2a030 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ken*,SrcList*,Ex
2a040 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65  prList*,int,Toke
2a050 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
2a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
2a070 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  pr*, int, int, u
2a080 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2a090 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
2a0a0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
2a0b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
2a0c0 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
2a0d0 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
2a0e0 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
2a0f0 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
2a100 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
2a110 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
2a120 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
2a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a140 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
2a150 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  u32,Expr*);.void
2a160 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
2a170 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
2a180 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
2a190 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
2a1a0 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
2a1b0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2a1c0 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
2a1d0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2a1e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a1f0 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
2a200 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
2a210 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
2a220 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
2a230 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
2a240 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
2a250 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2a260 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
2a270 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
2a280 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
2a290 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
2a2a0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
2a2b0 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  *,char*);.#endif
2a2c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
2a2d0 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20  eteFrom(Parse*, 
2a2e0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  SrcList*, Expr*,
2a2f0 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72   ExprList*, Expr
2a300 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a310 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53  Update(Parse*, S
2a320 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
2a330 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70  t*,Expr*,int,Exp
2a340 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20  rList*,Expr*,.  
2a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a360 20 55 70 73 65 72 74 2a 29 3b 0a 57 68 65 72 65   Upsert*);.Where
2a370 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
2a380 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
2a390 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
2a3a0 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
2a3b0 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
2a3c0 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
2a3d0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f  (WhereInfo*);.Lo
2a3e0 67 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72  gEst sqlite3Wher
2a3f0 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28  eOutputRowCount(
2a400 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2a410 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
2a420 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66  istinct(WhereInf
2a430 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2a440 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57  WhereIsOrdered(W
2a450 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2a460 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65  sqlite3WhereOrde
2a470 72 42 79 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c  rByLimitOptLabel
2a480 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2a490 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
2a4a0 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f  Sorted(WhereInfo
2a4b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2a4c0 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65  hereContinueLabe
2a4d0 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
2a4e0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  nt sqlite3WhereB
2a4f0 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49  reakLabel(WhereI
2a500 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
2a510 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73  e3WhereOkOnePass
2a520 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74  (WhereInfo*, int
2a530 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50  *);.#define ONEP
2a540 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20  ASS_OFF      0  
2a550 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20        /* Use of 
2a560 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f  ONEPASS not allo
2a570 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wed */.#define O
2a580 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20  NEPASS_SINGLE   
2a590 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50  1        /* ONEP
2a5a0 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20  ASS valid for a 
2a5b0 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74  single row updat
2a5c0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45  e */.#define ONE
2a5d0 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20  PASS_MULTI    2 
2a5e0 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53         /* ONEPAS
2a5f0 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d  S is valid for m
2a600 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
2a610 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a620 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c  CodeLoadIndexCol
2a630 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  umn(Parse*, Inde
2a640 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  x*, int, int, in
2a650 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2a660 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
2a670 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2a680 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
2a690 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2a6a0 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
2a6b0 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c  mnOfTable(Vdbe*,
2a6c0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2a6d0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2a6e0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76  lite3ExprCodeMov
2a6f0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
2a700 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2a710 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
2a720 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a730 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a740 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72  ExprCodeCopy(Par
2a750 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2a760 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2a770 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65  prCodeFactorable
2a780 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2a790 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a7a0 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28  3ExprCodeAtInit(
2a7b0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2a7c0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a7d0 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72  ExprCodeTemp(Par
2a7e0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a  se*, Expr*, int*
2a7f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a800 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72  prCodeTarget(Par
2a810 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2a820 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2a830 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50  prCodeAndCache(P
2a840 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a850 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2a860 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28  xprCodeExprList(
2a870 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2a880 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  *, int, int, u8)
2a890 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
2a8a0 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30  _ECEL_DUP      0
2a8b0 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f  x01  /* Deep, no
2a8c0 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73  t shallow copies
2a8d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
2a8e0 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20  TE_ECEL_FACTOR  
2a8f0 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72   0x02  /* Factor
2a900 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65   out constant te
2a910 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  rms */.#define S
2a920 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20  QLITE_ECEL_REF  
2a930 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65      0x04  /* Use
2a940 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f   ExprList.u.x.iO
2a950 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65  rderByCol */.#de
2a960 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
2a970 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20 20  _OMITREF  0x08  
2a980 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c  /* Omit if ExprL
2a990 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79  ist.u.x.iOrderBy
2a9a0 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  Col */.void sqli
2a9b0 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61  te3ExprIfTrue(Pa
2a9c0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a9d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a9e0 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28  ite3ExprIfFalse(
2a9f0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2aa00 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2aa10 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
2aa20 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70  eDup(Parse*, Exp
2aa30 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54  r*, int, int);.T
2aa40 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e  able *sqlite3Fin
2aa50 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  dTable(sqlite3*,
2aa60 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2aa70 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
2aa80 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20  ne LOCATE_VIEW  
2aa90 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c    0x01.#define L
2aaa0 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78  OCATE_NOERR   0x
2aab0 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  02.Table *sqlite
2aac0 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72  3LocateTable(Par
2aad0 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f  se*,u32 flags,co
2aae0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2aaf0 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
2ab00 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
2ab10 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33  leItem(Parse*,u3
2ab20 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53  2 flags,struct S
2ab30 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
2ab40 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69  Index *sqlite3Fi
2ab50 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  ndIndex(sqlite3*
2ab60 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
2ab70 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2ab80 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2ab90 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  dDeleteTable(sql
2aba0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
2abb0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2abc0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2abd0 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33  eteIndex(sqlite3
2abe0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
2abf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ac00 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f  Vacuum(Parse*,To
2ac10 6b 65 6e 2a 2c 45 78 70 72 2a 29 3b 0a 69 6e 74  ken*,Expr*);.int
2ac20 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
2ac30 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
2ac40 33 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33  3*, int, sqlite3
2ac50 5f 76 61 6c 75 65 2a 29 3b 0a 63 68 61 72 20 2a  _value*);.char *
2ac60 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
2ac70 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
2ac80 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2ac90 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50  te3ExprCompare(P
2aca0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70  arse*,Expr*, Exp
2acb0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2acc0 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
2acd0 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72  Skip(Expr*, Expr
2ace0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2acf0 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70  ite3ExprListComp
2ad00 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45  are(ExprList*, E
2ad10 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
2ad20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2ad30 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72 73 65  mpliesExpr(Parse
2ad40 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  *,Expr*, Expr*, 
2ad50 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2ad60 33 45 78 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e  3ExprImpliesNonN
2ad70 75 6c 6c 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74  ullRow(Expr*,int
2ad80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2ad90 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67  xprAnalyzeAggreg
2ada0 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ates(NameContext
2adb0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
2adc0 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
2add0 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f  zeAggList(NameCo
2ade0 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a  ntext*,ExprList*
2adf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2ae00 70 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78  prCoveredByIndex
2ae10 28 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72  (Expr*, int iCur
2ae20 2c 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a  , Index *pIdx);.
2ae30 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74  int sqlite3Funct
2ae40 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45  ionUsesThisSrc(E
2ae50 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xpr*, SrcList*);
2ae60 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65  .Vdbe *sqlite3Ge
2ae70 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23  tVdbe(Parse*);.#
2ae80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
2ae90 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71  TESTABLE.void sq
2aea0 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61  lite3PrngSaveSta
2aeb0 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
2aec0 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72  qlite3PrngRestor
2aed0 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65  eState(void);.#e
2aee0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
2aef0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
2af00 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2af10 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
2af20 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  fySchema(Parse*,
2af30 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2af40 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d  te3CodeVerifyNam
2af50 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  edSchema(Parse*,
2af60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
2af70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
2af80 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
2af90 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
2afa0 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61  id sqlite3EndTra
2afb0 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
2afc0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2afd0 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73  e3Savepoint(Pars
2afe0 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29  e*, int, Token*)
2aff0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
2b000 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71  oseSavepoints(sq
2b010 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73  lite3 *);.void s
2b020 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78  qlite3LeaveMutex
2b030 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73  AndCloseZombie(s
2b040 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2b050 6c 69 74 65 33 45 78 70 72 49 64 54 6f 54 72 75  lite3ExprIdToTru
2b060 65 46 61 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69  eFalse(Expr*);.i
2b070 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 54 72  nt sqlite3ExprTr
2b080 75 74 68 56 61 6c 75 65 28 63 6f 6e 73 74 20 45  uthValue(const E
2b090 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2b0a0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
2b0b0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
2b0c0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
2b0d0 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
2b0e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b0f0 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
2b100 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29  ction(Expr*, u8)
2b110 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b120 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f  rIsConstantOrGro
2b130 75 70 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70  upBy(Parse*, Exp
2b140 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
2b150 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2b160 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45  sTableConstant(E
2b170 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65  xpr*,int);.#ifde
2b180 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2b190 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74  CURSOR_HINTS.int
2b1a0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74   sqlite3ExprCont
2b1b0 61 69 6e 73 53 75 62 71 75 65 72 79 28 45 78 70  ainsSubquery(Exp
2b1c0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  r*);.#endif.int 
2b1d0 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74  sqlite3ExprIsInt
2b1e0 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a  eger(Expr*, int*
2b1f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b200 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73  prCanBeNull(cons
2b210 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t Expr*);.int sq
2b220 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
2b230 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
2b240 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
2b250 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2b260 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
2b270 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b280 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
2b290 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61  e(.    Parse*,Ta
2b2a0 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e  ble*,Trigger*,in
2b2b0 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38  t,int,int,i16,u8
2b2c0 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69  ,u8,u8,int);.voi
2b2d0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
2b2e0 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28  eRowIndexDelete(
2b2f0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2b300 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
2b310 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b320 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65  3GenerateIndexKe
2b330 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  y(Parse*, Index*
2b340 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
2b350 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74   int*,Index*,int
2b360 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2b370 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62  esolvePartIdxLab
2b380 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  el(Parse*,int);.
2b390 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 52  int sqlite3ExprR
2b3a0 65 66 65 72 65 6e 63 65 73 55 70 64 61 74 65 64  eferencesUpdated
2b3b0 43 6f 6c 75 6d 6e 28 45 78 70 72 2a 2c 69 6e 74  Column(Expr*,int
2b3c0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2b3d0 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
2b3e0 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
2b3f0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
2b400 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
2b410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b430 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
2b440 69 6e 74 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74  int*,int*,Upsert
2b450 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
2b460 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52  E_ENABLE_NULL_TR
2b470 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  IM.  void sqlite
2b480 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35  3SetMakeRecordP5
2b490 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  (Vdbe*,Table*);.
2b4a0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2b4b0 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63  qlite3SetMakeRec
2b4c0 6f 72 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69  ordP5(A,B).#endi
2b4d0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  f.void sqlite3Co
2b4e0 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28  mpleteInsertion(
2b4f0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2b500 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69  t,int,int,int*,i
2b510 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74  nt,int,int);.int
2b520 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
2b530 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73  eAndIndices(Pars
2b540 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2b550 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69   u8, int, u8*, i
2b560 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64  nt*, int*);.void
2b570 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
2b580 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73  teOperation(Pars
2b590 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
2b5a0 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69  oid sqlite3Multi
2b5b0 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76  Write(Parse*);.v
2b5c0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62  oid sqlite3MayAb
2b5d0 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ort(Parse*);.voi
2b5e0 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e  d sqlite3HaltCon
2b5f0 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
2b600 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c  int, int, char*,
2b610 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73   i8, u8);.void s
2b620 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73  qlite3UniqueCons
2b630 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
2b640 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  nt, Index*);.voi
2b650 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f  d sqlite3RowidCo
2b660 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
2b670 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45   int, Table*);.E
2b680 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2b690 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
2b6a0 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
2b6b0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
2b6c0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
2b6d0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
2b6e0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
2b6f0 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
2b700 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
2b710 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
2b720 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
2b730 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
2b740 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
2b750 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
2b760 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 46 75  Select*,int);.Fu
2b770 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 75  ncDef *sqlite3Fu
2b780 6e 63 74 69 6f 6e 53 65 61 72 63 68 28 69 6e 74  nctionSearch(int
2b790 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
2b7a0 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
2b7b0 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75  tBuiltinFuncs(Fu
2b7c0 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e  ncDef*,int);.Fun
2b7d0 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
2b7e0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2b7f0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
2b800 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  nt,u8,u8);.void 
2b810 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
2b820 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
2b830 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2b840 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
2b850 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
2b860 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2b870 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65  RegisterPerConne
2b880 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63  ctionBuiltinFunc
2b890 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
2b8a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
2b8b0 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65  tyCheckOk(sqlite
2b8c0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2b8d0 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f  SafetyCheckSickO
2b8e0 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  rOk(sqlite3*);.v
2b8f0 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67  oid sqlite3Chang
2b900 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20  eCookie(Parse*, 
2b910 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
2b920 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2b930 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65  VIEW) && !define
2b940 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
2b950 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69  IGGER).void sqli
2b960 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69  te3MaterializeVi
2b970 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ew(Parse*, Table
2b980 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69  *, Expr*, ExprLi
2b990 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  st*,Expr*,int);.
2b9a0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2b9b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2b9c0 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  GER.  void sqlit
2b9d0 65 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50  e3BeginTrigger(P
2b9e0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f  arse*, Token*,To
2b9f0 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c  ken*,int,int,IdL
2ba00 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20  ist*,SrcList*,. 
2ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
2ba30 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
2ba40 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54  d sqlite3FinishT
2ba50 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
2ba60 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b  riggerStep*, Tok
2ba70 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  en*);.  void sql
2ba80 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28  ite3DropTrigger(
2ba90 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2baa0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2bab0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
2bac0 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69  rPtr(Parse*, Tri
2bad0 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  gger*);.  Trigge
2bae0 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
2baf0 72 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c  rsExist(Parse *,
2bb00 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78   Table*, int, Ex
2bb10 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d  prList*, int *pM
2bb20 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20  ask);.  Trigger 
2bb30 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c  *sqlite3TriggerL
2bb40 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
2bb50 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  le *);.  void sq
2bb60 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
2bb70 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
2bb80 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72  ger *, int, Expr
2bb90 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  List*, int, Tabl
2bba0 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  e *,.           
2bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbc0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2bbd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2bbe0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
2bbf0 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69  ect(Parse *, Tri
2bc00 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  gger *, Table *,
2bc10 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2bc20 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69  .  void sqliteVi
2bc30 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65  ewTriggers(Parse
2bc40 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
2bc50 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
2bc60 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2bc70 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74  3DeleteTriggerSt
2bc80 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  ep(sqlite3*, Tri
2bc90 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72  ggerStep*);.  Tr
2bca0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2bcb0 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53  e3TriggerSelectS
2bcc0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  tep(sqlite3*,Sel
2bcd0 65 63 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ect*,.          
2bce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2bd00 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
2bd10 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  char*);.  Trigge
2bd20 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
2bd30 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28  iggerInsertStep(
2bd40 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  Parse*,Token*, I
2bd50 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
2bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd80 53 65 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72  Select*,u8,Upser
2bd90 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdb0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2bdc0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2bdd0 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ar*);.  TriggerS
2bde0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2bdf0 67 65 72 55 70 64 61 74 65 53 74 65 70 28 50 61  gerUpdateStep(Pa
2be00 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  rse*,Token*,Expr
2be10 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38  List*, Expr*, u8
2be20 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be40 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2be50 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2be60 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2be70 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2be80 72 44 65 6c 65 74 65 53 74 65 70 28 50 61 72 73  rDeleteStep(Pars
2be90 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  e*,Token*, Expr*
2bea0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bec0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2bed0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2bee0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2bef0 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
2bf00 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
2bf10 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
2bf20 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2bf30 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
2bf40 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
2bf50 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  r*);.  u32 sqlit
2bf60 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
2bf70 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a  (Parse*,Trigger*
2bf80 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69  ,ExprList*,int,i
2bf90 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  nt,Table*,int);.
2bfa0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2bfb0 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
2bfc0 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
2bfd0 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65   ? (p)->pTopleve
2bfe0 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e  l : (p)).# defin
2bff0 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65  e sqlite3IsTople
2c000 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
2c010 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65  plevel==0).#else
2c020 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c030 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42  3TriggersExist(B
2c040 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65  ,C,D,E,F) 0.# de
2c050 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65  fine sqlite3Dele
2c060 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23  teTrigger(A,B).#
2c070 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
2c080 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c  ropTriggerPtr(A,
2c090 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
2c0a0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2c0b0 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29  teTrigger(A,B,C)
2c0c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c0d0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
2c0e0 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c  A,B,C,D,E,F,G,H,
2c0f0 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  I).# define sqli
2c100 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2c110 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c  rDirect(A,B,C,D,
2c120 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E,F).# define sq
2c130 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
2c140 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e  (X, Y) 0.# defin
2c150 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
2c160 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65  plevel(p) p.# de
2c170 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f  fine sqlite3IsTo
2c180 70 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65  plevel(p) 1.# de
2c190 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
2c1a0 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43  gerColmask(A,B,C
2c1b0 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64  ,D,E,F,G) 0.#end
2c1c0 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
2c1d0 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20  oinType(Parse*, 
2c1e0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
2c1f0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2c200 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69  lite3CreateForei
2c210 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  gnKey(Parse*, Ex
2c220 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
2c230 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
2c240 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2c250 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
2c260 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
2c270 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c280 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
2c290 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
2c2a0 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
2c2b0 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73  *,Schema*,SrcLis
2c2c0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2c2d0 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73  e3AuthCheck(Pars
2c2e0 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  e*,int, const ch
2c2f0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2c300 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2c310 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
2c320 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61  thContextPush(Pa
2c330 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78  rse*, AuthContex
2c340 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2c350 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c360 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41  AuthContextPop(A
2c370 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20  uthContext*);.  
2c380 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52  int sqlite3AuthR
2c390 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63  eadCol(Parse*, c
2c3a0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
2c3b0 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
2c3c0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2c3d0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
2c3e0 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e  a,b,c,d).# defin
2c3f0 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  e sqlite3AuthChe
2c400 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20  ck(a,b,c,d,e)   
2c410 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66   SQLITE_OK.# def
2c420 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
2c430 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63  ontextPush(a,b,c
2c440 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2c450 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
2c460 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29  (a)  ((void)(a))
2c470 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2c480 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65  ite3Attach(Parse
2c490 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  *, Expr*, Expr*,
2c4a0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2c4b0 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73  lite3Detach(Pars
2c4c0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
2c4d0 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28   sqlite3FixInit(
2c4e0 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a  DbFixer*, Parse*
2c4f0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2c500 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
2c510 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2c520 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72  xSrcList(DbFixer
2c530 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
2c540 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65  t sqlite3FixSele
2c550 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c  ct(DbFixer*, Sel
2c560 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
2c570 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65  e3FixExpr(DbFixe
2c580 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
2c590 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69  sqlite3FixExprLi
2c5a0 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  st(DbFixer*, Exp
2c5b0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2c5c0 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74  ite3FixTriggerSt
2c5d0 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69  ep(DbFixer*, Tri
2c5e0 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20  ggerStep*);.int 
2c5f0 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73  sqlite3AtoF(cons
2c600 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c  t char *z, doubl
2c610 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  e*, int, u8);.in
2c620 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33  t sqlite3GetInt3
2c630 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  2(const char *, 
2c640 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
2c650 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61  e3Atoi(const cha
2c660 72 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  r*);.#ifndef SQL
2c670 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69  ITE_OMIT_UTF16.i
2c680 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42  nt sqlite3Utf16B
2c690 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69  yteLen(const voi
2c6a0 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43  d *pData, int nC
2c6b0 68 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  har);.#endif.int
2c6c0 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72   sqlite3Utf8Char
2c6d0 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Len(const char *
2c6e0 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65  pData, int nByte
2c6f0 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74  );.u32 sqlite3Ut
2c700 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a  f8Read(const u8*
2c710 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
2c720 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c  e3LogEst(u64);.L
2c730 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
2c740 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f  EstAdd(LogEst,Lo
2c750 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  gEst);.#ifndef S
2c760 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2c770 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73  ALTABLE.LogEst s
2c780 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d  qlite3LogEstFrom
2c790 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a  Double(double);.
2c7a0 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
2c7b0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2c7c0 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
2c7d0 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) || \.    defin
2c7e0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2c7f0 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29  _STAT3_OR_STAT4)
2c800 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
2c810 64 28 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e  d(SQLITE_EXPLAIN
2c820 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29  _ESTIMATED_ROWS)
2c830 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45  .u64 sqlite3LogE
2c840 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b  stToInt(LogEst);
2c850 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73  .#endif.VList *s
2c860 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28 73  qlite3VListAdd(s
2c870 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63  qlite3*,VList*,c
2c880 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69  onst char*,int,i
2c890 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt);.const char 
2c8a0 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d  *sqlite3VListNum
2c8b0 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e  ToName(VList*,in
2c8c0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  t);.int sqlite3V
2c8d0 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c  ListNameToNum(VL
2c8e0 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
2c8f0 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  ,int);../*.** Ro
2c900 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
2c910 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
2c920 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
2c930 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
2c940 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
2c950 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
2c960 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
2c970 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
2c980 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
2c990 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
2c9a0 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67  3PutVarint(unsig
2c9b0 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  ned char*, u64);
2c9c0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
2c9d0 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
2c9e0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
2c9f0 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
2ca00 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
2ca10 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2ca20 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
2ca30 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
2ca40 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
2ca50 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20   common case is 
2ca60 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20  for a varint to 
2ca70 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  be a single byte
2ca80 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e  .  They followin
2ca90 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64  g.** macros hand
2caa0 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
2cab0 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f  se without a pro
2cac0 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74  cedure call, but
2cad0 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68   then call.** th
2cae0 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20  e procedure for 
2caf0 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a  larger varints..
2cb00 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
2cb10 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
2cb20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29   (u8)((*(A)<(u8)
2cb30 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29  0x80)?((B)=(u32)
2cb40 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47  *(A)),1:sqlite3G
2cb50 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  etVarint32((A),(
2cb60 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65  u32 *)&(B))).#de
2cb70 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32  fine putVarint32
2cb80 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
2cb90 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
2cba0 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69  x80)?(*(A)=(unsi
2cbb0 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31  gned char)(B)),1
2cbc0 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56  :\.  sqlite3PutV
2cbd0 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a  arint((A),(B))).
2cbe0 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
2cbf0 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56  t    sqlite3GetV
2cc00 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75  arint.#define pu
2cc10 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
2cc20 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f  e3PutVarint...co
2cc30 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2cc40 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
2cc50 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65  r(sqlite3*, Inde
2cc60 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2cc70 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56  3TableAffinity(V
2cc80 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
2cc90 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
2cca0 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
2ccb0 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
2ccc0 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
2ccd0 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
2cce0 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
2ccf0 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
2cd00 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
2cd10 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69  3TableColumnAffi
2cd20 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29  nity(Table*,int)
2cd30 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78  ;.char sqlite3Ex
2cd40 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  prAffinity(Expr 
2cd50 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
2cd60 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74  ite3Atoi64(const
2cd70 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e   char*, i64*, in
2cd80 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
2cd90 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
2cda0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
2cdb0 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  4*);.void sqlite
2cdc0 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71  3ErrorWithMsg(sq
2cdd0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2cde0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76  st char*,...);.v
2cdf0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
2ce00 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2ce10 76 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74  void sqlite3Syst
2ce20 65 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  emError(sqlite3*
2ce30 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ,int);.void *sql
2ce40 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
2ce50 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
2ce60 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75  ar *z, int n);.u
2ce70 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  8 sqlite3HexToIn
2ce80 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71  t(int h);.int sq
2ce90 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
2cea0 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
2ceb0 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2cec0 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69  n **);..#if defi
2ced0 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ned(SQLITE_NEED_
2cee0 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20  ERR_NAME).const 
2cef0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
2cf00 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
2cf10 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2cf20 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c  _ENABLE_DESERIAL
2cf30 49 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  IZE.int sqlite3M
2cf40 65 6d 64 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a  emdbInit(void);.
2cf50 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68  #endif..const ch
2cf60 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74  ar *sqlite3ErrSt
2cf70 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
2cf80 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61  te3ReadSchema(Pa
2cf90 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f  rse *pParse);.Co
2cfa0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69  llSeq *sqlite3Fi
2cfb0 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65  ndCollSeq(sqlite
2cfc0 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74  3*,u8 enc, const
2cfd0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74   char*,int);.int
2cfe0 20 73 71 6c 69 74 65 33 49 73 42 69 6e 61 72 79   sqlite3IsBinary
2cff0 28 63 6f 6e 73 74 20 43 6f 6c 6c 53 65 71 2a 29  (const CollSeq*)
2d000 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2d010 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28  e3LocateCollSeq(
2d020 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
2d030 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29  onst char*zName)
2d040 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2d050 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61  e3ExprCollSeq(Pa
2d060 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2d070 72 20 2a 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53  r *pExpr);.CollS
2d080 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4e  eq *sqlite3ExprN
2d090 4e 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  NCollSeq(Parse *
2d0a0 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45  pParse, Expr *pE
2d0b0 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
2d0c0 33 45 78 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63  3ExprCollSeqMatc
2d0d0 68 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45  h(Parse*,Expr*,E
2d0e0 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
2d0f0 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
2d100 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70  teToken(Parse *p
2d110 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f  Parse, Expr*, co
2d120 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  nst Token*, int)
2d130 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2d140 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72  xprAddCollateStr
2d150 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ing(Parse*,Expr*
2d160 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45  ,const char*);.E
2d170 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2d180 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72  SkipCollate(Expr
2d190 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2d1a0 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73  heckCollSeq(Pars
2d1b0 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b  e *, CollSeq *);
2d1c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 72 69 74  .int sqlite3Writ
2d1d0 61 62 6c 65 53 63 68 65 6d 61 28 73 71 6c 69 74  ableSchema(sqlit
2d1e0 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
2d1f0 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65  3CheckObjectName
2d200 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20  (Parse *, const 
2d210 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71  char *);.void sq
2d220 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
2d230 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  ges(sqlite3 *, i
2d240 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2d250 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  AddInt64(i64*,i6
2d260 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  4);.int sqlite3S
2d270 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ubInt64(i64*,i64
2d280 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  );.int sqlite3Mu
2d290 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  lInt64(i64*,i64)
2d2a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73  ;.int sqlite3Abs
2d2b0 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64  Int32(int);.#ifd
2d2c0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2d2d0 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20  _8_3_NAMES.void 
2d2e0 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
2d2f0 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  x3(const char*, 
2d300 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
2d310 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69  define sqlite3Fi
2d320 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23  leSuffix3(X,Y).#
2d330 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33  endif.u8 sqlite3
2d340 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
2d350 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63   char *z,u8);..c
2d360 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
2d370 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69  e3ValueText(sqli
2d380 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
2d390 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
2d3a0 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76  eBytes(sqlite3_v
2d3b0 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64  alue*, u8);.void
2d3c0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2d3d0 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  Str(sqlite3_valu
2d3e0 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  e*, int, const v
2d3f0 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20  oid *,u8,.      
2d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d410 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
2d420 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2d430 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69  alueSetNull(sqli
2d440 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69  te3_value*);.voi
2d450 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
2d460 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
2d470 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
2d480 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
2d490 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23  ew(sqlite3 *);.#
2d4a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d4b0 49 54 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73  IT_UTF16.char *s
2d4c0 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
2d4d0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2d4e0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
2d4f0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2d500 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
2d510 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
2d520 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
2d530 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
2d540 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2d550 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
2d560 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
2d570 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
2d580 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
2d590 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
2d5a0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2d5b0 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
2d5c0 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
2d5d0 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
2d5e0 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78  3StrBINARY[];.ex
2d5f0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2d600 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2d610 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a  UpperToLower[];.
2d620 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2d630 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2d640 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78  e3CtypeMap[];.ex
2d650 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  tern const Token
2d660 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e   sqlite3IntToken
2d670 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  s[];.extern SQLI
2d680 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71  TE_WSD struct Sq
2d690 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69  lite3Config sqli
2d6a0 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72  te3Config;.exter
2d6b0 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  n FuncDefHash sq
2d6c0 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63  lite3BuiltinFunc
2d6d0 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
2d6e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
2d6f0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
2d700 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
2d710 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64  ndif.#endif.#ifd
2d720 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
2d730 65 78 74 65 72 6e 20 73 71 6c 69 74 65 33 5f 75  extern sqlite3_u
2d740 69 6e 74 36 34 20 73 71 6c 69 74 65 33 4e 50 72  int64 sqlite3NPr
2d750 6f 66 69 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66  ofileCnt;.#endif
2d760 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
2d770 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
2d780 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
2d790 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2d7a0 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
2d7b0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2d7c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2d7d0 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
2d7e0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2d7f0 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
2d800 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2d810 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2d820 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
2d830 61 6d 65 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  ameColumn(Parse*
2d840 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2d850 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
2d860 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e   sqlite3GetToken
2d870 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2d880 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  char *, int *);.
2d890 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74  void sqlite3Nest
2d8a0 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  edParse(Parse*, 
2d8b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
2d8c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2d8d0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
2d8e0 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a  tements(sqlite3*
2d8f0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2d900 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74  te3CodeSubselect
2d910 28 50 61 72 73 65 2a 2c 20 45 78 70 72 20 2a 2c  (Parse*, Expr *,
2d920 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2d930 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72   sqlite3SelectPr
2d940 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ep(Parse*, Selec
2d950 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
2d960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2d970 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72  electWrongNumTer
2d980 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70  msError(Parse *p
2d990 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70  Parse, Select *p
2d9a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
2d9b0 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73  tchSpanName(cons
2d9c0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2d9d0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2d9e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2d9f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
2da00 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d  lveExprNames(Nam
2da10 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
2da20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2da30 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d  solveExprListNam
2da40 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
2da50 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69   ExprList*);.voi
2da60 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
2da70 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
2da80 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
2da90 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
2daa0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
2dab0 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
2dac0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
2dad0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
2dae0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
2daf0 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
2db00 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2db10 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
2db20 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2db30 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
2db40 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
2db50 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
2db60 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2db70 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
2db80 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
2db90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2dba0 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
2dbb0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
2dbc0 4c 69 73 74 20 2a 29 3b 0a 76 6f 69 64 20 2a 73  List *);.void *s
2dbd0 71 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65  qlite3RenameToke
2dbe0 6e 4d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69  nMap(Parse*, voi
2dbf0 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  d*, Token*);.voi
2dc00 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54  d sqlite3RenameT
2dc10 6f 6b 65 6e 52 65 6d 61 70 28 50 61 72 73 65 2a  okenRemap(Parse*
2dc20 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20 76 6f 69  , void *pTo, voi
2dc30 64 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f 69 64 20  d *pFrom);.void 
2dc40 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78 70  sqlite3RenameExp
2dc50 72 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20 45  rUnmap(Parse*, E
2dc60 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2dc70 74 65 33 52 65 6e 61 6d 65 45 78 70 72 6c 69 73  te3RenameExprlis
2dc80 74 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20 45  tUnmap(Parse*, E
2dc90 78 70 72 4c 69 73 74 2a 29 3b 0a 43 6f 6c 6c 53  xprList*);.CollS
2dca0 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
2dcb0 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
2dcc0 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
2dcd0 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
2dce0 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
2dcf0 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
2dd00 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20   Column*);.void 
2dd10 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
2dd20 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2dd30 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2dd40 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
2dd50 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
2dd60 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a  *, sqlite3_file*
2dd70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2dd80 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54  ndDb(sqlite3*, T
2dd90 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2dda0 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71  te3FindDbName(sq
2ddb0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
2ddc0 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
2ddd0 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
2dde0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42  sqlite3*,int iDB
2ddf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2de00 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65  eleteIndexSample
2de10 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78  s(sqlite3*,Index
2de20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2de30 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e  DefaultRowEst(In
2de40 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2de50 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
2de60 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
2de70 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2de80 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69  ite3IsLikeFuncti
2de90 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  on(sqlite3*,Expr
2dea0 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76  *,int*,char*);.v
2deb0 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d  oid sqlite3Schem
2dec0 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a  aClear(void *);.
2ded0 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53  Schema *sqlite3S
2dee0 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33  chemaGet(sqlite3
2def0 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e   *, Btree *);.in
2df00 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
2df10 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
2df20 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b  db, Schema *);.K
2df30 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2df40 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69  eyInfoAlloc(sqli
2df50 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  te3*,int,int);.v
2df60 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  oid sqlite3KeyIn
2df70 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a  foUnref(KeyInfo*
2df80 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2df90 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65  te3KeyInfoRef(Ke
2dfa0 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
2dfb0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2dfc0 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  OfIndex(Parse*, 
2dfd0 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49 6e 66 6f  Index*);.KeyInfo
2dfe0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2dff0 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72  FromExprList(Par
2e000 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2e010 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 64  int, int);..#ifd
2e020 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2e030 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  int sqlite3KeyIn
2e040 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65  foIsWriteable(Ke
2e050 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a  yInfo*);.#endif.
2e060 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74  int sqlite3Creat
2e070 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c  eFunc(sqlite3 *,
2e080 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
2e090 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c  nt, int, void *,
2e0a0 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2e0b0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2e0c0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
2e0d0 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
2e0e0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2e0f0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2e100 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69 64 20 28  e **), .  void (
2e110 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2e120 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29  xt*),.  void (*)
2e130 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2e140 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
2e150 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2e160 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2e170 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e 63 44 65  e **), .  FuncDe
2e180 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
2e190 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71  uctor.);.void sq
2e1a0 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74 72 75 63  lite3NoopDestruc
2e1b0 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  tor(void*);.void
2e1c0 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74   sqlite3OomFault
2e1d0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
2e1e0 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72   sqlite3OomClear
2e1f0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2e200 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73  sqlite3ApiExit(s
2e210 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29  qlite3 *db, int)
2e220 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
2e230 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61  nTempDatabase(Pa
2e240 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  rse *);..void sq
2e250 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
2e260 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c  t(StrAccum*, sql
2e270 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e  ite3*, char*, in
2e280 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  t, int);.char *s
2e290 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
2e2a0 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
2e2b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2e2c0 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
2e2d0 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
2e2e0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
2e2f0 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
2e300 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
2e310 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
2e320 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
2e330 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
2e340 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
2e350 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
2e360 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
2e370 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
2e380 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69  const u8 *);..#i
2e390 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e3a0 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74 20 73  T_SUBQUERY.int s
2e3b0 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49  qlite3ExprCheckI
2e3c0 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  N(Parse*, Expr*)
2e3d0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2e3e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2e3f0 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54 45 5f  kIN(x,y) SQLITE_
2e400 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  OK.#endif..#ifde
2e410 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2e420 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76  STAT3_OR_STAT4.v
2e430 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  oid sqlite3Analy
2e440 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  zeFunctions(void
2e450 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2e460 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65  at4ProbeSetValue
2e470 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49 6e 64  (.    Parse*,Ind
2e480 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f  ex*,UnpackedReco
2e490 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69  rd**,Expr*,int,i
2e4a0 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  nt,int*);.int sq
2e4b0 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65 46  lite3Stat4ValueF
2e4c0 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20  romExpr(Parse*, 
2e4d0 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74  Expr*, u8, sqlit
2e4e0 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69  e3_value**);.voi
2e4f0 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  d sqlite3Stat4Pr
2e500 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64  obeFree(Unpacked
2e510 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71  Record*);.int sq
2e520 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e  lite3Stat4Column
2e530 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
2e540 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74   void*, int, int
2e550 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
2e560 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
2e570 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e  IndexColumnAffin
2e580 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e  ity(sqlite3*, In
2e590 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  dex*, int);.#end
2e5a0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  if../*.** The in
2e5b0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
2e5c0 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
2e5d0 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66  arser.*/.#ifndef
2e5e0 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
2e5f0 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c  TION.  void *sql
2e600 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28  ite3ParserAlloc(
2e610 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 2c 20 50  void*(*)(u64), P
2e620 61 72 73 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  arse*);.  void s
2e630 71 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65  qlite3ParserFree
2e640 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28  (void*, void(*)(
2e650 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a  void*));.#endif.
2e660 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2e670 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54  er(void*, int, T
2e680 6f 6b 65 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oken);.int sqlit
2e690 65 33 50 61 72 73 65 72 46 61 6c 6c 62 61 63 6b  e3ParserFallback
2e6a0 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 59 59  (int);.#ifdef YY
2e6b0 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50  TRACKMAXSTACKDEP
2e6c0 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TH.  int sqlite3
2e6d0 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28  ParserStackPeak(
2e6e0 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  void*);.#endif..
2e6f0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
2e700 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73  LoadExtensions(s
2e710 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65  qlite3*);.#ifnde
2e720 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
2e730 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76  AD_EXTENSION.  v
2e740 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
2e750 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
2e760 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  e3*);.#else.# de
2e770 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73  fine sqlite3Clos
2e780 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23  eExtensions(X).#
2e790 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
2e7a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
2e7b0 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73  D_CACHE.  void s
2e7c0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
2e7d0 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Parse *, int, in
2e7e0 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  t, u8, const cha
2e7f0 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  r *);.#else.  #d
2e800 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62  efine sqlite3Tab
2e810 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a  leLock(v,w,x,y,z
2e820 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
2e830 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
2e840 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f  nt sqlite3Utf8To
2e850 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  8(unsigned char*
2e860 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
2e870 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2e880 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
2e890 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2e8a0 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69  Clear(Y).#  defi
2e8b0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  ne sqlite3VtabSy
2e8c0 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f  nc(X,Y) SQLITE_O
2e8d0 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
2e8e0 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
2e8f0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2e900 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58  ite3VtabCommit(X
2e910 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2e920 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
2e930 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71  ) 0.#  define sq
2e940 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29  lite3VtabLock(X)
2e950 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2e960 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a  e3VtabUnlock(X).
2e970 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2e980 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
2e990 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2e9a0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
2e9b0 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
2e9c0 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
2e9d0 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
2e9e0 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
2e9f0 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
2ea00 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
2ea10 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
2ea20 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
2ea30 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
2ea40 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
2ea50 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
2ea60 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2ea70 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
2ea80 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74  , Vdbe*);.   int
2ea90 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
2eaa0 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  back(sqlite3 *db
2eab0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2eac0 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69  3VtabCommit(sqli
2ead0 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69  te3 *db);.   voi
2eae0 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
2eaf0 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
2eb00 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2eb10 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  Unlock(VTable *)
2eb20 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2eb30 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
2eb40 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e  sqlite3*);.   in
2eb50 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  t sqlite3VtabSav
2eb60 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a  epoint(sqlite3 *
2eb70 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20  , int, int);.   
2eb80 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2eb90 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62  ImportErrmsg(Vdb
2eba0 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  e*, sqlite3_vtab
2ebb0 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73  *);.   VTable *s
2ebc0 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
2ebd0 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
2ebe0 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a 73 71  );.   Module *sq
2ebf0 6c 69 74 65 33 56 74 61 62 43 72 65 61 74 65 4d  lite3VtabCreateM
2ec00 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71 6c 69  odule(.     sqli
2ec10 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74  te3*,.     const
2ec20 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63 6f 6e   char*,.     con
2ec30 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
2ec40 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a 2c 0a  e*,.     void*,.
2ec50 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
2ec60 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64 65 66  d*).   );.#  def
2ec70 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
2ec80 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d  nSync(db) ((db)-
2ec90 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64  >nVTrans>0 && (d
2eca0 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a  b)->aVTrans==0).
2ecb0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2ecc0 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
2ecd0 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  ableInit(Parse*,
2ece0 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
2ecf0 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
2ed00 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71  ousTableClear(sq
2ed10 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  lite3*,Module*);
2ed20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2ed30 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
2ed40 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
2ed50 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
2ed60 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
2ed70 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
2ed80 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
2ed90 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
2eda0 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
2edb0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2edc0 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
2edd0 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
2ede0 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
2edf0 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
2ee00 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2ee10 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
2ee20 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
2ee30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
2ee40 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
2ee50 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
2ee60 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
2ee70 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2ee80 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
2ee90 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
2eea0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
2eeb0 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
2eec0 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
2eed0 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
2eee0 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
2eef0 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
2ef00 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
2ef10 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
2ef20 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  *);.sqlite3_int6
2ef30 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72  4 sqlite3StmtCur
2ef40 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33  rentTime(sqlite3
2ef50 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20  _context*);.int 
2ef60 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d  sqlite3VdbeParam
2ef70 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c  eterIndex(Vdbe*,
2ef80 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e   const char*, in
2ef90 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  t);.int sqlite3T
2efa0 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28  ransferBindings(
2efb0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20  sqlite3_stmt *, 
2efc0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b  sqlite3_stmt *);
2efd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
2efe0 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29  serReset(Parse*)
2eff0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2f000 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45  ENABLE_NORMALIZE
2f010 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 6f  .char *sqlite3No
2f020 72 6d 61 6c 69 7a 65 28 56 64 62 65 2a 2c 20 63  rmalize(Vdbe*, c
2f030 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
2f040 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  dif.int sqlite3R
2f050 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
2f060 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2f070 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
2f080 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2f090 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2f0a0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2f0b0 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
2f0c0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
2f0d0 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
2f0e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
2f0f0 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
2f100 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
2f110 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
2f120 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
2f130 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2f140 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
2f150 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
2f160 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
2f170 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2f180 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2f190 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
2f1a0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
2f1b0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2f1c0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
2f1d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
2f1e0 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
2f1f0 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
2f200 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
2f210 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
2f220 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
2f230 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
2f240 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
2f250 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
2f260 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
2f270 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
2f280 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
2f290 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
2f2a0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2f2b0 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 23  te(x,y).#endif.#
2f2c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f2d0 49 54 5f 55 50 53 45 52 54 0a 20 20 55 70 73 65  IT_UPSERT.  Upse
2f2e0 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72  rt *sqlite3Upser
2f2f0 74 4e 65 77 28 73 71 6c 69 74 65 33 2a 2c 45 78  tNew(sqlite3*,Ex
2f300 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  prList*,Expr*,Ex
2f310 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
2f320 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70    void sqlite3Up
2f330 73 65 72 74 44 65 6c 65 74 65 28 73 71 6c 69 74  sertDelete(sqlit
2f340 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20  e3*,Upsert*);.  
2f350 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55  Upsert *sqlite3U
2f360 70 73 65 72 74 44 75 70 28 73 71 6c 69 74 65 33  psertDup(sqlite3
2f370 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 69 6e  *,Upsert*);.  in
2f380 74 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 41  t sqlite3UpsertA
2f390 6e 61 6c 79 7a 65 54 61 72 67 65 74 28 50 61 72  nalyzeTarget(Par
2f3a0 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 55 70 73  se*,SrcList*,Ups
2f3b0 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ert*);.  void sq
2f3c0 6c 69 74 65 33 55 70 73 65 72 74 44 6f 55 70 64  lite3UpsertDoUpd
2f3d0 61 74 65 28 50 61 72 73 65 2a 2c 55 70 73 65 72  ate(Parse*,Upser
2f3e0 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64 65 78 2a  t*,Table*,Index*
2f3f0 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 64 65  ,int);.#else.#de
2f400 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65  fine sqlite3Upse
2f410 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79 2c 7a 29  rtNew(v,w,x,y,z)
2f420 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23 64   ((Upsert*)0).#d
2f430 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73  efine sqlite3Ups
2f440 65 72 74 44 65 6c 65 74 65 28 78 2c 79 29 0a 23  ertDelete(x,y).#
2f450 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70  define sqlite3Up
2f460 73 65 72 74 44 75 70 28 78 2c 79 29 20 20 20 20  sertDup(x,y)    
2f470 20 20 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a     ((Upsert*)0).
2f480 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65 63 6c  #endif.../* Decl
2f490 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e  arations for fun
2f4a0 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63  ctions in fkey.c
2f4b0 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61  . All of these a
2f4c0 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a  re replaced by.*
2f4d0 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69  * no-op macros i
2f4e0 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  f OMIT_FOREIGN_K
2f4f0 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49  EY is defined. I
2f500 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66  n this case no f
2f510 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75  oreign.** key fu
2f520 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61  nctionality is a
2f530 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49  vailable. If OMI
2f540 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66  T_TRIGGER is def
2f550 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54  ined but.** OMIT
2f560 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
2f570 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f  not, only some o
2f580 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20  f the functions 
2f590 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a  are no-oped. In.
2f5a0 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72  ** this case for
2f5b0 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61  eign keys are pa
2f5c0 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68  rsed, but no oth
2f5d0 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  er functionality
2f5e0 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20   is.** provided 
2f5f0 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20  (enforcement of 
2f600 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72  FK constraints r
2f610 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67  equires the trig
2f620 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29  gers sub-system)
2f630 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2f640 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
2f650 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
2f660 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2f670 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f  IT_TRIGGER).  vo
2f680 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  id sqlite3FkChec
2f690 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
2f6a0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
2f6b0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2f6c0 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
2f6d0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
2f6e0 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  t *, Table*);.  
2f6f0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63  void sqlite3FkAc
2f700 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61  tions(Parse*, Ta
2f710 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ble*, ExprList*,
2f720 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2f730 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
2f740 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a  kRequired(Parse*
2f750 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20  , Table*, int*, 
2f760 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  int);.  u32 sqli
2f770 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72  te3FkOldmask(Par
2f780 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  se*, Table*);.  
2f790 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52  FKey *sqlite3FkR
2f7a0 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20  eferences(Table 
2f7b0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
2f7c0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74  ine sqlite3FkAct
2f7d0 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  ions(a,b,c,d,e,f
2f7e0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2f7f0 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63  te3FkCheck(a,b,c
2f800 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
2f810 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  e sqlite3FkDropT
2f820 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64  able(a,b,c).  #d
2f830 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f  efine sqlite3FkO
2f840 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20  ldmask(a,b)     
2f850 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
2f860 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
2f870 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a  d(a,b,c,d)    0.
2f880 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2f890 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 61 29  3FkReferences(a)
2f8a0 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66          0.#endif
2f8b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f8c0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2f8d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2f8e0 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20  kDelete(sqlite3 
2f8f0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e  *, Table*);.  in
2f900 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  t sqlite3FkLocat
2f910 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61  eIndex(Parse*,Ta
2f920 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78  ble*,FKey*,Index
2f930 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65  **,int**);.#else
2f940 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2f950 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a  e3FkDelete(a,b).
2f960 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2f970 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61  3FkLocateIndex(a
2f980 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66  ,b,c,d,e).#endif
2f990 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62  .../*.** Availab
2f9a0 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f  le fault injecto
2f9b0 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e  rs.  Should be n
2f9c0 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e  umbered beginnin
2f9d0 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65  g with 0..*/.#de
2f9e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
2f9f0 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43  TINJECTOR_MALLOC
2fa00 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
2fa10 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
2fa20 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31  TOR_COUNT      1
2fa30 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
2fa40 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64  rface to the cod
2fa50 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65  e in fault.c use
2fa60 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e  d for identifyin
2fa70 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61  g "benign".** ma
2fa80 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54  lloc failures. T
2fa90 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73  his is only pres
2faa0 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 55 4e  ent if SQLITE_UN
2fab0 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73 20 6e  TESTABLE.** is n
2fac0 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
2fad0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
2fae0 54 45 53 54 41 42 4c 45 0a 20 20 76 6f 69 64 20  TESTABLE.  void 
2faf0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
2fb00 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
2fb10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e    void sqlite3En
2fb20 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  dBenignMalloc(vo
2fb30 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  id);.#else.  #de
2fb40 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69  fine sqlite3Begi
2fb50 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  nBenignMalloc().
2fb60 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2fb70 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
2fb80 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ().#endif../*.**
2fb90 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
2fba0 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
2fbb0 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
2fbc0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
2fbd0 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
2fbe0 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20    1   /* Search 
2fbf0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
2fc00 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
2fc10 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20  e IN_INDEX_EPH  
2fc20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53          2   /* S
2fc30 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72  earch an ephemer
2fc40 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65  al b-tree */.#de
2fc50 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
2fc60 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f  DEX_ASC    3   /
2fc70 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78  * Existing index
2fc80 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64   ASCENDING */.#d
2fc90 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
2fca0 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20 20  NDEX_DESC   4   
2fcb0 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
2fcc0 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  x DESCENDING */.
2fcd0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2fce0 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20  _NOOP         5 
2fcf0 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76    /* No table av
2fd00 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d  ailable. Use com
2fd10 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a  parisons */./*.*
2fd20 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20  * Allowed flags 
2fd30 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72 61  for the 3rd para
2fd40 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
2fd50 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a  FindInIndex()..*
2fd60 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2fd70 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30  EX_NOOP_OK     0
2fd80 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  x0001  /* OK to 
2fd90 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f  return IN_INDEX_
2fda0 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NOOP */.#define 
2fdb0 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53  IN_INDEX_MEMBERS
2fdc0 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20  HIP  0x0002  /* 
2fdd0 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
2fde0 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20   for membership 
2fdf0 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  test */.#define 
2fe00 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20  IN_INDEX_LOOP   
2fe10 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
2fe20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
2fe30 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e   as a loop */.in
2fe40 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  t sqlite3FindInI
2fe50 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78  ndex(Parse *, Ex
2fe60 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c  pr *, u32, int*,
2fe70 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c   int*);..int sql
2fe80 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  ite3JournalOpen(
2fe90 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63  sqlite3_vfs *, c
2fea0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c  onst char *, sql
2feb0 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74  ite3_file *, int
2fec0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2fed0 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73  te3JournalSize(s
2fee0 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23  qlite3_vfs *);.#
2fef0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2ff00 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
2ff10 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65 66  WRITE) \. || def
2ff20 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2ff30 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f  LE_BATCH_ATOMIC_
2ff40 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71 6c  WRITE).  int sql
2ff50 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74  ite3JournalCreat
2ff60 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  e(sqlite3_file *
2ff70 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
2ff80 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49  qlite3JournalIsI
2ff90 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f  nMemory(sqlite3_
2ffa0 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73  file *p);.void s
2ffb0 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c  qlite3MemJournal
2ffc0 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c  Open(sqlite3_fil
2ffd0 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
2ffe0 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
2fff0 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a  AndFlags(Parse *
30000 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29  pParse, Expr *p)
30010 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ;.#if SQLITE_MAX
30020 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
30030 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
30040 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65  tExprHeight(Sele
30050 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ct *);.  int sql
30060 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
30070 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ght(Parse*, int)
30080 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
30090 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  e sqlite3SelectE
300a0 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20  xprHeight(x) 0. 
300b0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
300c0 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
300d0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32  x,y).#endif..u32
300e0 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65   sqlite3Get4byte
300f0 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69  (const u8*);.voi
30100 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74  d sqlite3Put4byt
30110 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69  e(u8*, u32);..#i
30120 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
30130 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
30140 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
30150 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
30160 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69  (sqlite3 *, sqli
30170 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  te3 *);.  void s
30180 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
30190 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  Unlocked(sqlite3
301a0 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71   *db);.  void sq
301b0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
301c0 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64  losed(sqlite3 *d
301d0 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  b);.#else.  #def
301e0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
301f0 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79  ctionBlocked(x,y
30200 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
30210 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
30220 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69  ocked(x).  #defi
30230 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
30240 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65  tionClosed(x).#e
30250 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
30260 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64  ITE_DEBUG.  void
30270 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
30280 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20  ace(FILE*, char 
30290 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  *);.#endif.#if d
302a0 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41 47  efined(YYCOVERAG
302b0 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  E).  int sqlite3
302c0 50 61 72 73 65 72 43 6f 76 65 72 61 67 65 28 46  ParserCoverage(F
302d0 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ILE*);.#endif../
302e0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
302f0 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43  TE_ENABLE IOTRAC
30300 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68  E exists then th
30310 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
30320 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72  e.** sqlite3IoTr
30330 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
30340 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b   to a printf-lik
30350 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74  e routine used t
30360 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74  o.** print I/O t
30370 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e  racing messages.
30380 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
30390 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
303a0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
303b0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
303c0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
303d0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
303e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
303f0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
30400 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20  e*);.SQLITE_API 
30410 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f  SQLITE_EXTERN vo
30420 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  id (SQLITE_CDECL
30430 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65   *sqlite3IoTrace
30440 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
30450 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
30460 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
30470 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
30480 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
30490 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
304a0 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
304b0 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
304c0 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
304d0 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
304e0 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
304f0 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
30500 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
30510 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
30520 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
30530 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
30540 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
30550 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
30560 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30570 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
30580 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
30590 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
305a0 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
305b0 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
305c0 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
305d0 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
305e0 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
305f0 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
30600 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
30610 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
30620 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
30630 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
30640 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
30650 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
30660 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
30670 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
30680 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
30690 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
306a0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
306b0 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
306c0 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
306d0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
306e0 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
306f0 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
30700 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
30710 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
30720 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
30730 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
30740 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
30750 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
30760 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
30770 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
30780 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
30790 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
307a0 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
307b0 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
307c0 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
307d0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
307e0 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
307f0 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
30800 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
30810 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
30820 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
30830 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
30840 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
30850 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
30860 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
30870 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
30880 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
30890 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
308a0 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
308b0 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
308c0 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
308d0 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
308e0 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
308f0 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
30900 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
30910 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
30920 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
30930 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
30940 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
30950 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
30960 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
30970 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
30980 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
30990 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
309a0 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
309b0 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
309c0 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
309d0 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
309e0 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
309f0 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
30a00 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
30a10 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
30a20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
30a30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
30a40 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
30a50 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
30a60 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
30a70 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
30a80 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
30a90 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
30aa0 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
30ab0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
30ac0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
30ad0 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
30ae0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
30af0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
30b00 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
30b10 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30b20 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
30b30 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
30b40 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
30b50 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
30b60 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
30b70 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
30b80 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
30b90 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
30ba0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
30bb0 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
30bc0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
30bd0 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30  E_PCACHE     0x0
30be0 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65  4  /* Page cache
30bf0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
30c00 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67  ./*.** Threading
30c10 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69   interface.*/.#i
30c20 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
30c30 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e  KER_THREADS>0.in
30c40 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43  t sqlite3ThreadC
30c50 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65  reate(SQLiteThre
30c60 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f  ad**,void*(*)(vo
30c70 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74  id*),void*);.int
30c80 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f   sqlite3ThreadJo
30c90 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  in(SQLiteThread*
30ca0 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69  , void**);.#endi
30cb0 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
30cc0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 50  QLITE_ENABLE_DBP
30cd0 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65 66  AGE_VTAB) || def
30ce0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
30cf0 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 70  ).int sqlite3Dbp
30d00 61 67 65 52 65 67 69 73 74 65 72 28 73 71 6c 69  ageRegister(sqli
30d10 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69  te3*);.#endif.#i
30d20 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
30d30 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56  _ENABLE_DBSTAT_V
30d40 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
30d50 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
30d60 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65   sqlite3DbstatRe
30d70 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
30d80 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
30d90 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72 53  lite3ExprVectorS
30da0 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72 29  ize(Expr *pExpr)
30db0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
30dc0 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20 2a  rIsVector(Expr *
30dd0 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
30de0 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64  lite3VectorField
30df0 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20 69  Subexpr(Expr*, i
30e00 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
30e10 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72 46  e3ExprForVectorF
30e20 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70 72  ield(Parse*,Expr
30e30 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
30e40 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72 4d  ite3VectorErrorM
30e50 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  sg(Parse*, Expr*
30e60 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
30e70 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
30e80 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73  PTION_DIAGS.cons
30e90 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65 33  t char **sqlite3
30ea0 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69  CompileOptions(i
30eb0 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64  nt *pnOpt);.#end
30ec0 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  if..#endif /* SQ
30ed0 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a           LITEINT_H */.