/ Hex Artifact Content
Login

Artifact 829bebd46e570fc1a22923df111417145b394b9c198a9c68c2d7b9a4243b9c29:


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 30 3a 4e 6f 72 6d  ;      /* 0:Norm
16980 61 6c 20 31 3a 55 4e 49 51 55 45 2c 20 32 3a 50  al 1:UNIQUE, 2:P
16990 52 49 4d 41 52 59 20 4b 45 59 2c 20 33 3a 49 50  RIMARY KEY, 3:IP
169a0 4b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  K */.  unsigned 
169b0 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20  bUnordered:1;   
169c0 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65  /* Use this inde
169d0 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71  x for == or IN q
169e0 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  ueries only */. 
169f0 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f   unsigned uniqNo
16a00 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75  tNull:1;  /* Tru
16a10 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20  e if UNIQUE and 
16a20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c  NOT NULL for all
16a30 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e   columns */.  un
16a40 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64  signed isResized
16a50 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
16a60 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a  f resizeIndexObj
16a70 65 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  ect() has been c
16a80 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67  alled */.  unsig
16a90 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31  ned isCovering:1
16aa0 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
16ab0 68 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e  his is a coverin
16ac0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73  g index */.  uns
16ad0 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e  igned noSkipScan
16ae0 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  :1;   /* Do not 
16af0 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d  try to use skip-
16b00 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a  scan if true */.
16b10 20 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74    unsigned hasSt
16b20 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69  at1:1;     /* ai
16b30 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73  RowLogEst values
16b40 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74   come from sqlit
16b50 65 5f 73 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73  e_stat1 */.  uns
16b60 69 67 6e 65 64 20 62 4e 6f 51 75 65 72 79 3a 31  igned bNoQuery:1
16b70 3b 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  ;     /* Do not 
16b80 75 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 74  use this index t
16b90 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75 65 72 69  o optimize queri
16ba0 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  es */.#ifdef SQL
16bb0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
16bc0 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20  _OR_STAT4.  int 
16bd0 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20  nSample;        
16be0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16bf0 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53  f elements in aS
16c00 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ample[] */.  int
16c10 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20   nSampleCol;    
16c20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
16c30 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45   IndexSample.anE
16c40 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f  q[] and so on */
16c50 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67  .  tRowcnt *aAvg
16c60 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  Eq;         /* A
16c70 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65  verage nEq value
16c80 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69  s for keys not i
16c90 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49  n aSample */.  I
16ca0 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d  ndexSample *aSam
16cb0 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c  ple;    /* Sampl
16cc0 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
16cd0 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f  ost key */.  tRo
16ce0 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20  wcnt *aiRowEst; 
16cf0 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
16d00 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64  arithmic stat1 d
16d10 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64  ata for this ind
16d20 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ex */.  tRowcnt 
16d30 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20  nRowEst0;       
16d40 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
16d50 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mic number of ro
16d60 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
16d70 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 42 69 74 6d  */.#endif.  Bitm
16d80 61 73 6b 20 63 6f 6c 4e 6f 74 49 64 78 65 64 3b  ask colNotIdxed;
16d90 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 75 6e       /* 0 for un
16da0 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20  indexed columns 
16db0 69 6e 20 70 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f  in pTab */.};../
16dc0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
16dd0 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64  ues for Index.id
16de0 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65  xType.*/.#define
16df0 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
16e00 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20  APPDEF      0   
16e10 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67  /* Created using
16e20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
16e30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
16e40 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20  IDXTYPE_UNIQUE  
16e50 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65      1   /* Imple
16e60 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63  ments a UNIQUE c
16e70 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
16e80 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
16e90 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20  YPE_PRIMARYKEY  
16ea0 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52  2   /* Is the PR
16eb0 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68  IMARY KEY for th
16ec0 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  e table */.#defi
16ed0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
16ee0 45 5f 49 50 4b 20 20 20 20 20 20 20 20 20 33 20  E_IPK         3 
16ef0 20 20 2f 2a 20 49 4e 54 45 47 45 52 20 50 52 49    /* INTEGER PRI
16f00 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
16f10 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  /../* Return tru
16f20 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
16f30 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  a PRIMARY KEY in
16f40 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
16f50 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  sPrimaryKeyIndex
16f60 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79  (X)  ((X)->idxTy
16f70 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59  pe==SQLITE_IDXTY
16f80 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a  PE_PRIMARYKEY)..
16f90 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
16fa0 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55  f index X is a U
16fb0 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23  NIQUE index */.#
16fc0 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49  define IsUniqueI
16fd0 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58  ndex(X)      ((X
16fe0 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e  )->onError!=OE_N
16ff0 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64  one)../* The Ind
17000 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61  ex.aiColumn[] va
17010 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  lues are normall
17020 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  y positive integ
17030 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72  er.  But.** ther
17040 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74  e are some negat
17050 69 76 65 20 76 61 6c 75 65 73 20 74 68 61 74 20  ive values that 
17060 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61  have special mea
17070 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  ning:.*/.#define
17080 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d   XN_ROWID     (-
17090 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65  1)     /* Indexe
170a0 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  d column is the 
170b0 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
170c0 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d   XN_EXPR      (-
170d0 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65  2)     /* Indexe
170e0 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65  d column is an e
170f0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a  xpression */../*
17100 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
17110 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
17120 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
17130 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
17140 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69  in memory.** usi
17150 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f  ng a structure o
17160 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65  f this type.  Se
17170 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
17180 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
17190 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73  e.** analyze.c s
171a0 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61  ource file for a
171b0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
171c0 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
171d0 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20   IndexSample {. 
171e0 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20   void *p;       
171f0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
17200 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20   sampled record 
17210 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
17220 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
17230 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65  f record in byte
17240 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  s */.  tRowcnt *
17250 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anEq;    /* Est.
17260 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
17270 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71  where the key eq
17280 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65  uals this sample
17290 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
172a0 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nLt;    /* Est. 
172b0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
172c0 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73  here key is less
172d0 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
172e0 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
172f0 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e  anDLt;   /* Est.
17300 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69   number of disti
17310 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68  nct keys less th
17320 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
17330 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  /.};../*.** Poss
17340 69 62 6c 65 20 76 61 6c 75 65 73 20 74 6f 20 75  ible values to u
17350 73 65 20 77 69 74 68 69 6e 20 74 68 65 20 66 6c  se within the fl
17360 61 67 73 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ags argument to 
17370 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
17380 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  )..*/.#define SQ
17390 4c 49 54 45 5f 54 4f 4b 45 4e 5f 51 55 4f 54 45  LITE_TOKEN_QUOTE
173a0 44 20 20 20 20 30 78 31 20 2f 2a 20 54 6f 6b 65  D    0x1 /* Toke
173b0 6e 20 69 73 20 61 20 71 75 6f 74 65 64 20 69 64  n is a quoted id
173c0 65 6e 74 69 66 69 65 72 2e 20 2a 2f 0a 23 64 65  entifier. */.#de
173d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45  fine SQLITE_TOKE
173e0 4e 5f 4b 45 59 57 4f 52 44 20 20 20 30 78 32 20  N_KEYWORD   0x2 
173f0 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20 6b 65  /* Token is a ke
17400 79 77 6f 72 64 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  yword. */../*.**
17410 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69   Each token comi
17420 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65  ng out of the le
17430 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  xer is an instan
17440 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74  ce of.** this st
17450 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73  ructure.  Tokens
17460 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61   are also used a
17470 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70  s part of an exp
17480 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ression..**.** T
17490 68 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 22  he memory that "
174a0 7a 22 20 70 6f 69 6e 74 73 20 74 6f 20 69 73 20  z" points to is 
174b0 6f 77 6e 65 64 20 62 79 20 6f 74 68 65 72 20 6f  owned by other o
174c0 62 6a 65 63 74 73 2e 20 20 54 61 6b 65 20 63 61  bjects.  Take ca
174d0 72 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6f  re.** that the o
174e0 77 6e 65 72 20 6f 66 20 74 68 65 20 22 7a 22 20  wner of the "z" 
174f0 73 74 72 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20  string does not 
17500 64 65 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 73  deallocate the s
17510 74 72 69 6e 67 20 62 65 66 6f 72 65 0a 2a 2a 20  tring before.** 
17520 74 68 65 20 54 6f 6b 65 6e 20 67 6f 65 73 20 6f  the Token goes o
17530 75 74 20 6f 66 20 73 63 6f 70 65 21 20 20 56 65  ut of scope!  Ve
17540 72 79 20 6f 66 74 65 6e 2c 20 74 68 65 20 22 7a  ry often, the "z
17550 22 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65  " points to some
17560 20 70 6c 61 63 65 0a 2a 2a 20 69 6e 20 74 68 65   place.** in the
17570 20 6d 69 64 64 6c 65 20 6f 66 20 74 68 65 20 50   middle of the P
17580 61 72 73 65 2e 7a 53 71 6c 20 74 65 78 74 2e 20  arse.zSql text. 
17590 20 42 75 74 20 69 74 20 6d 69 67 68 74 20 61 6c   But it might al
175a0 73 6f 20 70 6f 69 6e 74 20 74 6f 20 61 0a 2a 2a  so point to a.**
175b0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 2e 0a   static string..
175c0 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
175d0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
175e0 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
175f0 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
17600 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
17610 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
17620 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
17630 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
17640 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
17650 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
17660 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
17670 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
17680 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
17690 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
176a0 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
176b0 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
176c0 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
176d0 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
176e0 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
176f0 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
17700 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
17710 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
17720 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
17730 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
17740 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
17750 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
17760 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
17770 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
17780 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
17790 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
177a0 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
177b0 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
177c0 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
177d0 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
177e0 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
177f0 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
17800 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
17810 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
17820 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
17830 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
17840 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
17850 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
17860 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
17870 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
17880 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
17890 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
178a0 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
178b0 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
178c0 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
178d0 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
178e0 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
178f0 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
17900 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
17910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17920 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
17930 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
17940 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
17950 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
17960 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
17970 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
17980 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
17990 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
179a0 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
179d0 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
179e0 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
179f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
17a00 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
17a10 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
17a20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
17a30 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
17a40 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
17a50 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
17a60 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
17a70 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
17a80 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
17a90 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
17aa0 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
17ab0 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
17ac0 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
17ad0 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
17ae0 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
17af0 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
17b00 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
17b10 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
17b20 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
17b30 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
17b40 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
17b50 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
17b60 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
17b70 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
17b80 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
17b90 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
17ba0 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
17bb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
17bc0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
17bd0 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
17be0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
17bf0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
17c00 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
17c10 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
17c20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
17c30 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
17c40 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
17c50 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
17c60 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
17c70 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
17c80 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
17c90 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
17ca0 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
17cb0 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
17cc0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
17cd0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
17ce0 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
17cf0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
17d00 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
17d10 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
17d20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
17d30 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
17d40 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
17d50 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
17d60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17d70 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
17d80 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
17d90 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
17dc0 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
17dd0 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
17de0 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e00 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
17e10 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
17e20 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
17e30 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
17e40 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
17e50 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
17e60 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
17e70 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
17e80 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
17e90 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
17ea0 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
17eb0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
17ec0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17ed0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
17ee0 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
17ef0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
17f00 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
17f10 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
17f20 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
17f30 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
17f40 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
17f50 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
17f60 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
17f70 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
17f80 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
17f90 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
17fa0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17fb0 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
17fc0 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
17fd0 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
17fe0 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
17ff0 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
18000 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
18010 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
18020 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
18030 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
18040 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
18050 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
18060 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
18070 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
18080 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
18090 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
180a0 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
180b0 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
180c0 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
180d0 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
180e0 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
180f0 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
18100 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
18110 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
18120 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
18130 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
18140 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
18150 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
18160 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
18170 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
18180 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
18190 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
181a0 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
181b0 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
181c0 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
181d0 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
181e0 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
181f0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
18200 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
18210 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
18220 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
18230 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
18240 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
18250 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
18260 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
18270 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
18280 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
18290 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
182a0 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
182b0 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
182c0 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
182d0 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
182e0 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
182f0 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
18300 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
18310 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
18320 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
18330 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
18340 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
18350 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
18360 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
18370 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
18380 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
18390 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
183a0 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
183b0 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
183c0 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
183d0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
183e0 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
183f0 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
18400 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
18410 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  OB,.** or TK_STR
18420 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
18430 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
18440 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
18450 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
18460 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
18470 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
18480 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
18490 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
184a0 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61  ntains the.** va
184b0 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
184c0 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
184d0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
184e0 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
184f0 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
18500 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
18510 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
18520 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
18530 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
18540 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
18550 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
18560 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
18570 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
18580 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
18590 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
185a0 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
185b0 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
185c0 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
185d0 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
185e0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
185f0 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
18600 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
18610 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
18620 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
18630 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
18640 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
18650 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
18660 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
18670 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
18680 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
18690 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
186a0 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
186b0 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
186c0 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
186d0 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
186e0 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
186f0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
18700 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
18710 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
18720 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
18730 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  is.** valid..**.
18740 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
18750 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
18760 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
18770 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
18780 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
18790 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
187a0 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
187b0 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
187c0 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
187d0 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
187e0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
187f0 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
18800 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
18810 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
18820 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
18830 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
18840 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
18850 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
18860 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
18870 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
18880 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
18890 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
188a0 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
188b0 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
188c0 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
188d0 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
188e0 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
188f0 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
18900 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
18910 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
18920 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
18930 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
18940 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
18950 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
18960 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68  stion mark.** ch
18970 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
18980 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
18990 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
189a0 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
189b0 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20  index.** number 
189c0 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
189d0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
189e0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
189f0 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
18a00 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
18a10 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
18a20 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
18a30 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
18a40 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
18a50 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
18a60 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
18a70 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
18a80 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
18a90 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
18aa0 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
18ab0 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
18ac0 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
18ad0 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
18ae0 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
18af0 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
18b00 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
18b10 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
18b20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
18b30 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
18b40 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
18b50 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
18b60 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
18b70 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
18b80 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
18b90 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
18ba0 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
18bb0 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
18bc0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
18bd0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
18be0 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
18bf0 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
18c00 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
18c10 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
18c20 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
18c30 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
18c40 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
18c50 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
18c60 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
18c70 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
18c80 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
18c90 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
18ca0 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
18cb0 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
18cc0 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
18cd0 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
18ce0 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
18cf0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
18d00 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
18d10 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
18d20 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
18d30 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
18d40 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
18d50 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
18d60 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
18d70 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
18d80 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
18d90 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
18da0 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
18db0 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
18dc0 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
18dd0 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
18de0 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
18df0 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
18e00 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
18e10 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
18e20 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
18e30 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
18e40 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
18e50 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
18e60 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
18e70 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
18e80 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
18e90 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
18ea0 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
18eb0 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
18ec0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
18ed0 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
18ee0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
18ef0 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18f10 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
18f20 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
18f30 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
18f40 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
18f50 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
18f60 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
18f70 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
18f80 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
18f90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
18fa0 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
18fb0 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
18fc0 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
18fd0 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
18fe0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
18ff0 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
19000 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
19010 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
19020 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
19030 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
19040 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
19050 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
19060 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
19070 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
19080 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
19090 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
190a0 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
190b0 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
190c0 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
190d0 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
190e0 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
190f0 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
19100 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
19110 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
19120 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
19130 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
19140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19170 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
19180 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
19190 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
191a0 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
191b0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
191c0 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
191d0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
191e0 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
191f0 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
19200 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
19210 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
19220 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
19230 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
19240 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
19250 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
19260 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
19270 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
19280 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
19290 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
192a0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
192b0 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
192c0 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
192d0 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
192e0 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
192f0 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
19300 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
19310 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
19320 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
19330 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
19340 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
19350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
19390 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
193a0 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
193b0 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
193c0 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
193d0 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
193e0 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
193f0 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
19400 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
19410 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
19420 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
19430 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
19440 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
19450 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
19460 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
19470 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
19480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19490 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
194a0 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
194b0 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
194d0 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
194e0 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
194f0 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20  likelihood.     
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54      ** TK_SELECT
19520 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f  : 1st register o
19530 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  f result vector 
19540 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
19550 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
19560 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
19570 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
19580 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195a0 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
195b0 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
195c0 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20  (always >= 1).. 
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45          ** TK_SE
195f0 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  LECT_COLUMN: col
19600 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
19610 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31  t vector */.  i1
19620 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
19630 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
19640 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
19650 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
19660 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
19670 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
19680 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
19690 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
196a0 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
196b0 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
196c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
196d0 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
196e0 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
196f0 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19710 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
19720 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
19730 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
19740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19750 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
19760 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
19770 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
19780 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
19790 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
197a0 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
197b0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
197c0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
197d0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
197e0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
197f0 55 4d 4e 3a 20 54 61 62 6c 65 20 63 6f 6e 74 61  UMN: Table conta
19800 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 2e 20 43 61  ining column. Ca
19810 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20 20  n be NULL.      
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f       ** for a co
19840 6c 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78  lumn of an index
19850 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f   on an expressio
19860 6e 20 2a 2f 0a 20 20 20 20 57 69 6e 64 6f 77 20  n */.    Window 
19870 2a 70 57 69 6e 3b 20 20 20 20 20 20 20 20 20 20  *pWin;          
19880 2f 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 3a 20  /* TK_FUNCTION: 
19890 57 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f  Window definitio
198a0 6e 20 66 6f 72 20 74 68 65 20 66 75 6e 63 20 2a  n for the func *
198b0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 20 20  /.    struct {  
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
198d0 54 4b 5f 49 4e 2c 20 54 4b 5f 53 45 4c 45 43 54  TK_IN, TK_SELECT
198e0 2c 20 61 6e 64 20 54 4b 5f 45 58 49 53 54 53 20  , and TK_EXISTS 
198f0 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 41 64  */.      int iAd
19900 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  dr;             
19910 2f 2a 20 53 75 62 72 6f 75 74 69 6e 65 20 65 6e  /* Subroutine en
19920 74 72 79 20 61 64 64 72 65 73 73 20 2a 2f 0a 20  try address */. 
19930 20 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75       int regRetu
19940 72 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  rn;         /* R
19950 65 67 69 73 74 65 72 20 75 73 65 64 20 74 6f 20  egister used to 
19960 68 6f 6c 64 20 72 65 74 75 72 6e 20 61 64 64 72  hold return addr
19970 65 73 73 20 2a 2f 0a 20 20 20 20 7d 20 73 75 62  ess */.    } sub
19980 3b 0a 20 20 7d 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a  ;.  } y;.};../*.
19990 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
199a0 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67   are the meaning
199b0 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65  s of bits in the
199c0 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
199d0 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  d..*/.#define EP
199e0 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30  _FromJoin  0x000
199f0 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65  001 /* Originate
19a00 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c  s in ON/USING cl
19a10 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f  ause of outer jo
19a20 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
19a30 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30  _Agg       0x000
19a40 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  002 /* Contains 
19a50 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
19a60 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
19a70 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 61  */.#define EP_Ha
19a80 73 46 75 6e 63 20 20 20 30 78 30 30 30 30 30 34  sFunc   0x000004
19a90 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
19aa0 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74 69 6f   or more functio
19ab0 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a  ns of any kind *
19ac0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78  /.#define EP_Fix
19ad0 65 64 43 6f 6c 20 20 30 78 30 30 30 30 30 38 20  edCol  0x000008 
19ae0 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20 77 69 74  /* TK_Column wit
19af0 68 20 61 20 6b 6e 6f 77 6e 20 66 69 78 65 64 20  h a known fixed 
19b00 76 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  value */.#define
19b10 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
19b20 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
19b30 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
19b40 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
19b50 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
19b60 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
19b70 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
19b80 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
19b90 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
19ba0 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
19bb0 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
19bc0 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
19bd0 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
19be0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
19bf0 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
19c00 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
19c10 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
19c20 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
19c30 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
19c40 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
19c50 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
19c60 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
19c70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
19c80 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
19c90 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
19ca0 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
19cb0 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
19cc0 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
19cd0 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
19ce0 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
19cf0 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
19d00 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
19d10 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
19d20 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
19d30 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
19d40 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
19d50 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
19d60 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
19d70 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
19d80 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
19d90 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
19da0 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
19db0 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
19dc0 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
19dd0 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
19de0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
19df0 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
19e00 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
19e10 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
19e20 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
19e30 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
19e40 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
19e50 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
19e60 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
19e70 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
19e80 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
19e90 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
19ea0 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
19eb0 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
19ec0 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
19ed0 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
19ee0 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
19ef0 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
19f00 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
19f10 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
19f20 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
19f30 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
19f40 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
19f50 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
19f60 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30  ConstFunc 0x0800
19f70 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46  00 /* A SQLITE_F
19f80 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20  UNC_CONSTANT or 
19f90 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f  _SLOCHNG functio
19fa0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
19fb0 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30  CanBeNull 0x1000
19fc0 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c  00 /* Can be nul
19fd0 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55  l despite NOT NU
19fe0 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
19ff0 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71  .#define EP_Subq
1a000 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f  uery  0x200000 /
1a010 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
1a020 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72  a TK_SELECT oper
1a030 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
1a040 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34  EP_Alias     0x4
1a050 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61  00000 /* Is an a
1a060 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c  lias for a resul
1a070 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  t set column */.
1a080 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20  #define EP_Leaf 
1a090 20 20 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a       0x800000 /*
1a0a0 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52   Expr.pLeft, .pR
1a0b0 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74  ight, .u.pSelect
1a0c0 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65   all NULL */.#de
1a0d0 66 69 6e 65 20 45 50 5f 57 69 6e 46 75 6e 63 20  fine EP_WinFunc 
1a0e0 20 30 78 31 30 30 30 30 30 30 20 2f 2a 20 54 4b   0x1000000 /* TK
1a0f0 5f 46 55 4e 43 54 49 4f 4e 20 77 69 74 68 20 45  _FUNCTION with E
1a100 78 70 72 2e 79 2e 70 57 69 6e 20 73 65 74 20 2a  xpr.y.pWin set *
1a110 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62  /.#define EP_Sub
1a120 72 74 6e 20 20 20 30 78 32 30 30 30 30 30 30 20  rtn   0x2000000 
1a130 2f 2a 20 55 73 65 73 20 45 78 70 72 2e 79 2e 73  /* Uses Expr.y.s
1a140 75 62 2e 20 54 4b 5f 49 4e 2c 20 5f 53 45 4c 45  ub. TK_IN, _SELE
1a150 43 54 2c 20 6f 72 20 5f 45 58 49 53 54 53 20 2a  CT, or _EXISTS *
1a160 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f  /../*.** The EP_
1a170 50 72 6f 70 61 67 61 74 65 20 6d 61 73 6b 20 69  Propagate mask i
1a180 73 20 61 20 73 65 74 20 6f 66 20 70 72 6f 70 65  s a set of prope
1a190 72 74 69 65 73 20 74 68 61 74 20 61 75 74 6f 6d  rties that autom
1a1a0 61 74 69 63 61 6c 6c 79 20 70 72 6f 70 61 67 61  atically propaga
1a1b0 74 65 0a 2a 2a 20 75 70 77 61 72 64 73 20 69 6e  te.** upwards in
1a1c0 74 6f 20 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e  to parent nodes.
1a1d0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50  .*/.#define EP_P
1a1e0 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c  ropagate (EP_Col
1a1f0 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79  late|EP_Subquery
1a200 7c 45 50 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a  |EP_HasFunc)../*
1a210 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
1a220 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
1a230 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
1a240 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
1a250 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
1a260 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
1a270 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
1a280 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
1a290 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
1a2a0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
1a2b0 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
1a2c0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
1a2d0 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
1a2e0 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
1a2f0 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
1a300 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
1a310 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
1a320 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
1a330 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
1a340 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
1a350 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
1a360 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
1a370 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
1a380 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
1a390 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
1a3a0 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
1a3b0 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
1a3c0 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
1a3d0 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
1a3e0 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
1a3f0 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
1a400 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
1a410 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
1a420 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
1a430 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
1a440 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
1a450 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
1a460 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
1a470 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
1a480 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
1a490 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
1a4a0 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
1a4b0 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20  Expr.** struct, 
1a4c0 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
1a4d0 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63  ith the EP_Reduc
1a4e0 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45  ed flag set in E
1a4f0 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64  xpr.flags.** and
1a500 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
1a510 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65  with the EP_Toke
1a520 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a  nOnly flag set..
1a530 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
1a540 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20  FULLSIZE        
1a550 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20     sizeof(Expr) 
1a560 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c            /* Ful
1a570 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e  l size */.#defin
1a580 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  e EXPR_REDUCEDSI
1a590 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ZE        offset
1a5a0 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20  of(Expr,iTable) 
1a5b0 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75   /* Common featu
1a5c0 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  res */.#define E
1a5d0 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
1a5e0 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28  E      offsetof(
1a5f0 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a  Expr,pLeft)   /*
1a600 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20   Fewer features 
1a610 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  */../*.** Flags 
1a620 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71  passed to the sq
1a630 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
1a640 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65  unction. See the
1a650 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a   header comment.
1a660 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33  ** above sqlite3
1a670 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65  ExprDup() for de
1a680 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tails..*/.#defin
1a690 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  e EXPRDUP_REDUCE
1a6a0 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20           0x0001 
1a6b0 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64   /* Used reduced
1a6c0 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73  -size Expr nodes
1a6d0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73   */../*.** A lis
1a6e0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
1a6f0 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
1a700 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
1a710 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
1a720 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
1a730 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
1a740 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
1a750 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
1a760 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
1a770 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
1a780 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
1a790 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
1a7a0 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
1a7b0 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
1a7c0 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
1a7d0 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
1a7e0 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
1a7f0 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
1a800 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
1a810 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
1a820 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
1a830 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
1a840 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
1a850 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
1a860 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
1a870 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
1a880 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
1a890 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
1a8a0 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
1a8b0 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
1a8c0 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
1a8d0 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
1a8e0 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
1a8f0 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
1a900 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
1a910 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
1a920 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
1a930 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
1a940 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
1a950 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
1a960 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
1a970 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
1a980 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
1a990 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
1a9a0 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
1a9b0 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
1a9c0 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
1a9d0 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
1a9e0 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
1a9f0 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
1aa00 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
1aa10 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
1aa20 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
1aa30 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
1aa40 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
1aa50 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
1aa60 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1aa70 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
1aa80 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73   the list */.  s
1aa90 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
1aaa0 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
1aab0 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
1aac0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
1aad0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
1aae0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
1aaf0 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68  arse tree for th
1ab00 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
1ab10 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
1ab20 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ab30 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
1ab40 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
1ab50 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
1ab60 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
1ab70 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
1ab80 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
1ab90 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
1aba0 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
1abb0 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
1abc0 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
1abd0 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
1abe0 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
1abf0 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
1ac00 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
1ac10 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
1ac20 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
1ac30 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
1ac40 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
1ac50 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
1ac60 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
1ac70 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20   reusable :1;   
1ac80 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
1ac90 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62  ession is reusab
1aca0 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  le */.    unsign
1acb0 65 64 20 62 53 6f 72 74 65 72 52 65 66 20 3a 31  ed bSorterRef :1
1acc0 3b 20 2f 2a 20 44 65 66 65 72 20 65 76 61 6c 75  ; /* Defer evalu
1acd0 61 74 69 6f 6e 20 75 6e 74 69 6c 20 61 66 74 65  ation until afte
1ace0 72 20 73 6f 72 74 69 6e 67 20 2a 2f 0a 20 20 20  r sorting */.   
1acf0 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73   union {.      s
1ad00 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20  truct {.        
1ad10 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b  u16 iOrderByCol;
1ad20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44        /* For ORD
1ad30 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75  ER BY, column nu
1ad40 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73  mber in result s
1ad50 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31  et */.        u1
1ad60 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
1ad70 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
1ad80 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d  o Parse.aAlias[]
1ad90 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20   for zName */.  
1ada0 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69      } x;.      i
1adb0 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67  nt iConstExprReg
1adc0 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  ;      /* Regist
1add0 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72  er in which Expr
1ade0 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64   value is cached
1adf0 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d   */.    } u;.  }
1ae00 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
1ae10 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 73          /* One s
1ae20 6c 6f 74 20 66 6f 72 20 65 61 63 68 20 65 78 70  lot for each exp
1ae30 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
1ae40 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1ae50 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1ae60 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
1ae70 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
1ae80 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
1ae90 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
1aea0 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
1aeb0 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
1aec0 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
1aed0 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
1aee0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
1aef0 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
1af00 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
1af10 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
1af20 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
1af30 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
1af40 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
1af50 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
1af60 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
1af70 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
1af80 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
1af90 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
1afa0 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
1afb0 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
1afc0 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
1afd0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
1afe0 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
1aff0 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
1b000 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
1b010 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
1b020 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
1b030 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
1b040 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
1b050 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
1b060 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
1b070 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
1b080 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
1b090 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
1b0a0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
1b0b0 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
1b0c0 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
1b0d0 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
1b0e0 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
1b0f0 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
1b100 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
1b110 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
1b120 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b130 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
1b140 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1b150 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1b160 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1b170 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52  describes the FR
1b180 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
1b190 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1b1a0 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f  .** Each table o
1b1b0 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
1b1c0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
1b1d0 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d   a separate elem
1b1e0 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72  ent of.** the Sr
1b1f0 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e  cList.a[] array.
1b200 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20  .**.** With the 
1b210 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74  addition of mult
1b220 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75  iple database su
1b230 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f  pport, the follo
1b240 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
1b250 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73  * can also be us
1b260 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61  ed to describe a
1b270 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
1b280 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61  e such as the ta
1b290 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d  ble that.** is m
1b2a0 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e  odified by an IN
1b2b0 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72  SERT, DELETE, or
1b2c0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1b2d0 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20  t.  In standard 
1b2e0 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74  SQL,.** such a t
1b2f0 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73  able must be a s
1b300 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20  imple name: ID. 
1b310 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20   But in SQLite, 
1b320 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a  the table can.**
1b330 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69   now be identifi
1b340 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65  ed by a database
1b350 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68   name, a dot, th
1b360 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  en the table nam
1b370 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20  e: ID.ID..**.** 
1b380 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61  The jointype sta
1b390 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20  rts out showing 
1b3a0 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65  the join type be
1b3b0 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e  tween the curren
1b3c0 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74  t table.** and t
1b3d0 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e  he next table on
1b3e0 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20   the list.  The 
1b3f0 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68  parser builds th
1b400 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e  e list this way.
1b410 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53  .** But sqlite3S
1b420 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
1b430 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66  ype() later shif
1b440 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73  ts the jointypes
1b450 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a   so that each.**
1b460 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73   jointype expres
1b470 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74  ses the join bet
1b480 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61  ween the table a
1b490 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
1b4a0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  table..**.** In 
1b4b0 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c  the colUsed fiel
1b4c0 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  d, the high-orde
1b4d0 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69  r bit (bit 63) i
1b4e0 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62  s set if the tab
1b4f0 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d  le.** contains m
1b500 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75  ore than 63 colu
1b510 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74  mns and the 64-t
1b520 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d  h or later colum
1b530 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74  n is used..*/.st
1b540 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20  ruct SrcList {. 
1b550 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20   int nSrc;      
1b560 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
1b570 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
1b580 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ies in the FROM 
1b590 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20  clause */.  u32 
1b5a0 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
1b5b0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
1b5c0 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61  s allocated in a
1b5d0 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74  [] below */.  st
1b5e0 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
1b5f0 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a  m {.    Schema *
1b600 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68  pSchema;  /* Sch
1b610 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69  ema to which thi
1b620 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20  s item is fixed 
1b630 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61  */.    char *zDa
1b640 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65  tabase;  /* Name
1b650 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
1b660 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  ding this table 
1b670 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
1b680 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
1b690 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
1b6a0 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61  .    char *zAlia
1b6b0 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42  s;     /* The "B
1b6c0 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41  " part of a "A A
1b6d0 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e  S B" phrase.  zN
1b6e0 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a  ame is the "A" *
1b6f0 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
1b700 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51  b;      /* An SQ
1b710 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  L table correspo
1b720 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a  nding to zName *
1b730 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
1b740 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c  elect;  /* A SEL
1b750 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73  ECT statement us
1b760 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  ed in place of a
1b770 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
1b780 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53     int addrFillS
1b790 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20  ub;  /* Address 
1b7a0 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f  of subroutine to
1b7b0 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71   manifest a subq
1b7c0 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20  uery */.    int 
1b7d0 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a  regReturn;    /*
1b7e0 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1b7f0 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  g return address
1b800 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20   of addrFillSub 
1b810 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
1b820 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69  sult;    /* Regi
1b830 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65  sters holding re
1b840 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f  sults of a co-ro
1b850 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72  utine */.    str
1b860 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a  uct {.      u8 j
1b870 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a  ointype;      /*
1b880 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65   Type of join be
1b890 74 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65  tween this table
1b8a0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
1b8b0 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  s */.      unsig
1b8c0 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a  ned notIndexed :
1b8d0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
1b8e0 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20   there is a NOT 
1b8f0 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a  INDEXED clause *
1b900 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1b910 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b   isIndexedBy :1;
1b920 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1b930 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45  ere is an INDEXE
1b940 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  D BY clause */. 
1b950 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1b960 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20  TabFunc :1;     
1b970 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65  /* True if table
1b980 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
1b990 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20   syntax */.     
1b9a0 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72   unsigned isCorr
1b9b0 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54  elated :1;  /* T
1b9c0 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79  rue if sub-query
1b9d0 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a   is correlated *
1b9e0 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1b9f0 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31   viaCoroutine :1
1ba00 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65  ;  /* Implemente
1ba10 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e  d as a co-routin
1ba20 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1ba30 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20  ned isRecursive 
1ba40 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  :1;   /* True fo
1ba50 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65  r recursive refe
1ba60 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f  rence in WITH */
1ba70 0a 20 20 20 20 7d 20 66 67 3b 0a 20 20 20 20 69  .    } fg;.    i
1ba80 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20  nt iCursor;     
1ba90 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
1baa0 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20  sor number used 
1bab0 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74  to access this t
1bac0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72  able */.    Expr
1bad0 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a   *pOn;        /*
1bae0 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f   The ON clause o
1baf0 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
1bb00 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20  IdList *pUsing; 
1bb10 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63    /* The USING c
1bb20 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
1bb30 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63  */.    Bitmask c
1bb40 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20  olUsed;  /* Bit 
1bb50 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20  N (1<<N) set if 
1bb60 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62  column N of pTab
1bb70 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20   is used */.    
1bb80 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68  union {.      ch
1bb90 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20  ar *zIndexedBy; 
1bba0 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72     /* Identifier
1bbb0 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42   from "INDEXED B
1bbc0 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75  Y <zIndex>" clau
1bbd0 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72  se */.      Expr
1bbe0 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20  List *pFuncArg; 
1bbf0 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f   /* Arguments to
1bc00 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
1bc10 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20  nction */.    } 
1bc20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70  u1;.    Index *p
1bc30 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64  IBIndex;  /* Ind
1bc40 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72  ex structure cor
1bc50 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31  responding to u1
1bc60 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20  .zIndexedBy */. 
1bc70 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
1bc80 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
1bc90 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
1bca0 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
1bcb0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
1bcc0 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
1bcd0 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
1bce0 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
1bcf0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
1bd00 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
1bd10 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
1bd20 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
1bd30 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1bd40 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
1bd50 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
1bd60 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
1bd70 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
1bd80 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
1bd90 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
1bda0 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
1bdb0 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
1bdc0 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
1bdd0 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
1bde0 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
1bdf0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
1be00 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
1be10 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
1be20 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1be30 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
1be40 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
1be50 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
1be60 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
1be70 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
1be80 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
1be90 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
1bea0 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
1beb0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73  */.../*.** Flags
1bec0 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
1bed0 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20   the wctrlFlags 
1bee0 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c  parameter of sql
1bef0 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
1bf00 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72  .** and the Wher
1bf10 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73  eInfo.wctrlFlags
1bf20 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56   member..**.** V
1bf30 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1bf40 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
1bf50 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1bf60 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
1bf70 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d    == SF_FixedLim
1bf80 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  it.*/.#define WH
1bf90 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
1bfa0 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
1bfb0 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
1bfc0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
1bfd0 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
1bfe0 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
1bff0 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
1c000 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
1c010 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
1c020 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
1c030 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
1c040 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
1c050 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
1c060 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
1c070 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
1c080 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
1c090 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
1c0a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c0b0 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52  E_ONEPASS_MULTIR
1c0c0 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45  OW 0x0008 /* ONE
1c0d0 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20  PASS is ok with 
1c0e0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1c0f0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1c100 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
1c110 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20  0x0010 /* Ok to 
1c120 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
1c130 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
1c140 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f  define WHERE_OR_
1c150 53 55 42 43 4c 41 55 53 45 20 20 20 20 20 30 78  SUBCLAUSE     0x
1c160 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73 69  0020 /* Processi
1c170 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45 20 61  ng a sub-WHERE a
1c180 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20 20  s part of.      
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1b0 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69  ** the OR optimi
1c1c0 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69  zation  */.#defi
1c1d0 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59  ne WHERE_GROUPBY
1c1e0 20 20 20 20 20 20 20 20 20 20 30 78 30 30 34 30            0x0040
1c1f0 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20   /* pOrderBy is 
1c200 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42  really a GROUP B
1c210 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  Y */.#define WHE
1c220 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20  RE_DISTINCTBY   
1c230 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70 4f      0x0080 /* pO
1c240 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79  rderby is really
1c250 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75   a DISTINCT clau
1c260 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  se */.#define WH
1c270 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43  ERE_WANT_DISTINC
1c280 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 41  T    0x0100 /* A
1c290 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20  ll output needs 
1c2a0 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a  to be distinct *
1c2b0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c2c0 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20  SORTBYGROUP     
1c2d0 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70 6f   0x0200 /* Suppo
1c2e0 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  rt sqlite3WhereI
1c2f0 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65  sSorted() */.#de
1c300 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f  fine WHERE_SEEK_
1c310 54 41 42 4c 45 20 20 20 20 20 20 20 30 78 30 34  TABLE       0x04
1c320 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66  00 /* Do not def
1c330 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e  er seeks on main
1c340 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
1c350 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1c360 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30 30 20  LIMIT    0x0800 
1c370 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54  /* ORDERBY+LIMIT
1c380 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f   on the inner lo
1c390 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  op */.#define WH
1c3a0 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41  ERE_SEEK_UNIQ_TA
1c3b0 42 4c 45 20 20 30 78 31 30 30 30 20 2f 2a 20 44  BLE  0x1000 /* D
1c3c0 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b  o not defer seek
1c3d0 73 20 69 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20  s if unique */. 
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3f0 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
1c400 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72  2000    not curr
1c410 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64  ently used */.#d
1c420 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53 45 5f  efine WHERE_USE_
1c430 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30 78 34  LIMIT        0x4
1c440 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65 20 4c  000 /* Use the L
1c450 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65 73 74  IMIT in cost est
1c460 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20 20 20  imates */.      
1c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c480 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30 30 20    /*     0x8000 
1c490 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79     not currently
1c4a0 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c   used */../* All
1c4b0 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
1c4c0 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57  es from sqlite3W
1c4d0 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29  hereIsDistinct()
1c4e0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
1c4f0 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20  E_DISTINCT_NOOP 
1c500 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49       0  /* DISTI
1c510 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20  NCT keyword not 
1c520 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1c530 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1c540 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e  NIQUE    1  /* N
1c550 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a  o duplicates */.
1c560 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1c570 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20  STINCT_ORDERED  
1c580 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69   2  /* All dupli
1c590 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65  cates are adjace
1c5a0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nt */.#define WH
1c5b0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f  ERE_DISTINCT_UNO
1c5c0 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70  RDERED 3  /* Dup
1c5d0 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74  licates are scat
1c5e0 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tered */../*.** 
1c5f0 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
1c600 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
1c610 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
1c620 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
1c630 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
1c640 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
1c650 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
1c660 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
1c670 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
1c680 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
1c690 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
1c6a0 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
1c6b0 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
1c6c0 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
1c6d0 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
1c6e0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
1c6f0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
1c700 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
1c710 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
1c720 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
1c730 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
1c740 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
1c750 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
1c760 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
1c770 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
1c780 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
1c790 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
1c7a0 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
1c7b0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
1c7c0 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
1c7d0 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
1c7e0 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
1c7f0 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  st.** context is
1c800 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
1c810 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
1c820 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
1c830 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
1c840 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
1c850 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
1c860 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
1c870 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
1c880 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
1c890 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
1c8a0 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
1c8b0 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
1c8c0 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
1c8d0 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
1c8e0 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
1c8f0 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
1c900 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
1c910 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
1c920 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
1c930 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
1c940 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72  .** Each subquer
1c950 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d  y gets a new Nam
1c960 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70  eContext.  The p
1c970 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74  Next field point
1c980 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  s to the.** Name
1c990 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70  Context in the p
1c9a0 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68  arent query.  Th
1c9b0 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f  us the process o
1c9c0 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a  f scanning the.*
1c9d0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69  * NameContext li
1c9e0 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
1c9f0 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f  o searching thro
1ca00 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79  ugh successively
1ca10 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65   outer.** subque
1ca20 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  ries looking for
1ca30 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72   a match..*/.str
1ca40 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
1ca50 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1ca60 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  e;       /* The 
1ca70 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c  parser */.  SrcL
1ca80 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
1ca90 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1caa0 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72  tables used to r
1cab0 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a  esolve names */.
1cac0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
1cad0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1cae0 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
1caf0 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
1cb00 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20  t columns */.   
1cb10 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
1cb20 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
1cb30 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
1cb40 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
1cb50 76 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73 65 72  vel */.    Upser
1cb60 74 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20  t *pUpsert;     
1cb70 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  /* ON CONFLICT c
1cb80 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f  lause informatio
1cb90 6e 20 66 72 6f 6d 20 61 6e 20 75 70 73 65 72 74  n from an upsert
1cba0 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20 20 4e   */.  } uNC;.  N
1cbb0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78  ameContext *pNex
1cbc0 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65  t;  /* Next oute
1cbd0 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20  r name context. 
1cbe0 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d   NULL for outerm
1cbf0 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ost */.  int nRe
1cc00 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
1cc10 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73   Number of names
1cc20 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69   resolved by thi
1cc30 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69  s context */.  i
1cc40 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1cc50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1cc60 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65   errors encounte
1cc70 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76  red while resolv
1cc80 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75  ing names */.  u
1cc90 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20  16 ncFlags;     
1cca0 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d      /* Zero or m
1ccb0 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64  ore NC_* flags d
1ccc0 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a  efined below */.
1ccd0 20 20 53 65 6c 65 63 74 20 2a 70 57 69 6e 53 65    Select *pWinSe
1cce0 6c 65 63 74 3b 20 20 2f 2a 20 53 45 4c 45 43 54  lect;  /* SELECT
1ccf0 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 61   statement for a
1cd00 6e 79 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  ny window functi
1cd10 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ons */.};../*.**
1cd20 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
1cd30 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
1cd40 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
1cd50 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  ld..**.** Value 
1cd60 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c  constraints (all
1cd70 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73   checked via ass
1cd80 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43  ert()):.**    NC
1cd90 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46  _HasAgg    == SF
1cda0 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e 43  _HasAgg.**    NC
1cdb0 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46  _MinMaxAgg == SF
1cdc0 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51  _MinMaxAgg == SQ
1cdd0 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1cde0 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  .**.*/.#define N
1cdf0 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30  C_AllowAgg  0x00
1ce00 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  01  /* Aggregate
1ce10 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
1ce20 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
1ce30 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64  define NC_PartId
1ce40 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54  x   0x0002  /* T
1ce50 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
1ce60 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
1ce70 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e   WHERE */.#defin
1ce80 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
1ce90 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69  x0004  /* True i
1cea0 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
1ceb0 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
1cec0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
1ced0 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
1cee0 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20  0x0008  /* True 
1cef0 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
1cf00 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
1cf10 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1cf20 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78   NC_HasAgg    0x
1cf30 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  0010  /* One or 
1cf40 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
1cf50 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f  unctions seen */
1cf60 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45  .#define NC_IdxE
1cf70 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a  xpr   0x0020  /*
1cf80 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1cf90 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52  ng columns of CR
1cfa0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
1cfb0 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65  efine NC_VarSele
1cfc0 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20  ct 0x0040  /* A 
1cfd0 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75  correlated subqu
1cfe0 65 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65  ery has been see
1cff0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1d000 55 45 4c 69 73 74 20 20 20 20 30 78 30 30 38 30  UEList    0x0080
1d010 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43    /* True if uNC
1d020 2e 70 45 4c 69 73 74 20 69 73 20 75 73 65 64 20  .pEList is used 
1d030 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 41  */.#define NC_UA
1d040 67 67 49 6e 66 6f 20 20 30 78 30 31 30 30 20 20  ggInfo  0x0100  
1d050 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70  /* True if uNC.p
1d060 41 67 67 49 6e 66 6f 20 69 73 20 75 73 65 64 20  AggInfo is used 
1d070 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 55  */.#define NC_UU
1d080 70 73 65 72 74 20 20 20 30 78 30 32 30 30 20 20  psert   0x0200  
1d090 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70  /* True if uNC.p
1d0a0 55 70 73 65 72 74 20 69 73 20 75 73 65 64 20 2a  Upsert is used *
1d0b0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e  /.#define NC_Min
1d0c0 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f  MaxAgg 0x1000  /
1d0d0 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67  * min/max aggreg
1d0e0 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20  ates seen.  See 
1d0f0 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64  note above */.#d
1d100 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c 65 78  efine NC_Complex
1d110 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 72     0x2000  /* Tr
1d120 75 65 20 69 66 20 61 20 66 75 6e 63 74 69 6f 6e  ue if a function
1d130 20 6f 72 20 73 75 62 71 75 65 72 79 20 73 65 65   or subquery see
1d140 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1d150 41 6c 6c 6f 77 57 69 6e 20 20 30 78 34 30 30 30  AllowWin  0x4000
1d160 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66 75 6e 63    /* Window func
1d170 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
1d180 64 20 68 65 72 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  d here */../*.**
1d190 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1d1a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 62  the following ob
1d1b0 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 61  ject describes a
1d1c0 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46 4c   single ON CONFL
1d1d0 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65 20 69 6e  ICT.** clause in
1d1e0 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a 2a 0a 2a   an upsert..**.*
1d1f0 2a 20 54 68 65 20 70 55 70 73 65 72 74 54 61 72  * The pUpsertTar
1d200 67 65 74 20 66 69 65 6c 64 20 69 73 20 6f 6e 6c  get field is onl
1d210 79 20 73 65 74 20 69 66 20 74 68 65 20 4f 4e 20  y set if the ON 
1d220 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1d230 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e 66  includes.** conf
1d240 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75  lict-target clau
1d250 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20 43 4f 4e  se.  (In "ON CON
1d260 46 4c 49 43 54 28 61 2c 62 29 22 20 74 68 65 20  FLICT(a,b)" the 
1d270 22 28 61 2c 62 29 22 20 69 73 20 74 68 65 0a 2a  "(a,b)" is the.*
1d280 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65  * conflict-targe
1d290 74 20 63 6c 61 75 73 65 2e 29 20 20 54 68 65 20  t clause.)  The 
1d2a0 70 55 70 73 65 72 74 54 61 72 67 65 74 57 68 65  pUpsertTargetWhe
1d2b0 72 65 20 69 73 20 74 68 65 20 6f 70 74 69 6f 6e  re is the option
1d2c0 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75  al.** WHERE clau
1d2d0 73 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74  se used to ident
1d2e0 69 66 79 20 70 61 72 74 69 61 6c 20 75 6e 69 71  ify partial uniq
1d2f0 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a 2a  ue indexes..**.*
1d300 2a 20 70 55 70 73 65 72 74 53 65 74 20 69 73 20  * pUpsertSet is 
1d310 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75  the list of colu
1d320 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73 20 6f 66  mn=expr terms of
1d330 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
1d340 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68 65 20 70  ement. .** The p
1d350 55 70 73 65 72 74 53 65 74 20 66 69 65 6c 64 20  UpsertSet field 
1d360 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61 20 4f 4e  is NULL for a ON
1d370 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20 4e 4f 54   CONFLICT DO NOT
1d380 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a 20 70 55  HING.  The.** pU
1d390 70 73 65 72 74 57 68 65 72 65 20 69 73 20 74 68  psertWhere is th
1d3a0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
1d3b0 6f 72 20 74 68 65 20 55 50 44 41 54 45 20 61 6e  or the UPDATE an
1d3c0 64 20 69 73 20 4e 55 4c 4c 20 69 66 20 74 68 65  d is NULL if the
1d3d0 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65  .** WHERE clause
1d3e0 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a   is omitted..*/.
1d3f0 73 74 72 75 63 74 20 55 70 73 65 72 74 20 7b 0a  struct Upsert {.
1d400 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70 73    ExprList *pUps
1d410 65 72 74 54 61 72 67 65 74 3b 20 20 2f 2a 20 4f  ertTarget;  /* O
1d420 70 74 69 6f 6e 61 6c 20 64 65 73 63 72 69 70 74  ptional descript
1d430 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69 63 74 69  ion of conflicti
1d440 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  ng index */.  Ex
1d450 70 72 20 2a 70 55 70 73 65 72 74 54 61 72 67 65  pr *pUpsertTarge
1d460 74 57 68 65 72 65 3b 20 2f 2a 20 57 48 45 52 45  tWhere; /* WHERE
1d470 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
1d480 69 61 6c 20 69 6e 64 65 78 20 74 61 72 67 65 74  ial index target
1d490 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1d4a0 2a 70 55 70 73 65 72 74 53 65 74 3b 20 20 20 20  *pUpsertSet;    
1d4b0 20 2f 2a 20 54 68 65 20 53 45 54 20 63 6c 61 75   /* The SET clau
1d4c0 73 65 20 66 72 6f 6d 20 61 6e 20 4f 4e 20 43 4f  se from an ON CO
1d4d0 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f  NFLICT UPDATE */
1d4e0 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65 72 74  .  Expr *pUpsert
1d4f0 57 68 65 72 65 3b 20 20 20 20 20 20 20 2f 2a 20  Where;       /* 
1d500 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
1d510 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
1d520 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 2f 2a 20   UPDATE */.  /* 
1d530 54 68 65 20 66 69 65 6c 64 73 20 61 62 6f 76 65  The fields above
1d540 20 63 6f 6d 70 72 69 73 65 20 74 68 65 20 70 61   comprise the pa
1d550 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68 65  rse tree for the
1d560 20 75 70 73 65 72 74 20 63 6c 61 75 73 65 2e 0a   upsert clause..
1d570 20 20 2a 2a 20 54 68 65 20 66 69 65 6c 64 73 20    ** The fields 
1d580 62 65 6c 6f 77 20 61 72 65 20 75 73 65 64 20 74  below are used t
1d590 6f 20 74 72 61 6e 73 66 65 72 20 69 6e 66 6f 72  o transfer infor
1d5a0 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  mation from the 
1d5b0 49 4e 53 45 52 54 0a 20 20 2a 2a 20 70 72 6f 63  INSERT.  ** proc
1d5c0 65 73 73 69 6e 67 20 64 6f 77 6e 20 69 6e 74 6f  essing down into
1d5d0 20 74 68 65 20 55 50 44 41 54 45 20 70 72 6f 63   the UPDATE proc
1d5e0 65 73 73 69 6e 67 20 77 68 69 6c 65 20 67 65 6e  essing while gen
1d5f0 65 72 61 74 69 6e 67 20 63 6f 64 65 2e 0a 20 20  erating code..  
1d600 2a 2a 20 55 70 73 65 72 74 20 6f 77 6e 73 20 74  ** Upsert owns t
1d610 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  he memory alloca
1d620 74 65 64 20 61 62 6f 76 65 2c 20 62 75 74 20 6e  ted above, but n
1d630 6f 74 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 65  ot the memory be
1d640 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  low. */.  Index 
1d650 2a 70 55 70 73 65 72 74 49 64 78 3b 20 20 20 20  *pUpsertIdx;    
1d660 20 20 20 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e      /* Constrain
1d670 74 20 74 68 61 74 20 70 55 70 73 65 72 74 54 61  t that pUpsertTa
1d680 72 67 65 74 20 69 64 65 6e 74 69 66 69 65 73 20  rget identifies 
1d690 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 55  */.  SrcList *pU
1d6a0 70 73 65 72 74 53 72 63 3b 20 20 20 20 20 20 2f  psertSrc;      /
1d6b0 2a 20 54 61 62 6c 65 20 74 6f 20 62 65 20 75 70  * Table to be up
1d6c0 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  dated */.  int r
1d6d0 65 67 44 61 74 61 3b 20 20 20 20 20 20 20 20 20  egData;         
1d6e0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
1d6f0 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 61  gister holding a
1d700 72 72 61 79 20 6f 66 20 56 41 4c 55 45 53 20 2a  rray of VALUES *
1d710 2f 0a 20 20 69 6e 74 20 69 44 61 74 61 43 75 72  /.  int iDataCur
1d720 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1d730 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   Index of the da
1d740 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 69  ta cursor */.  i
1d750 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20 20 20  nt iIdxCur;     
1d760 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1d770 78 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 69  x of the first i
1d780 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 7d  ndex cursor */.}
1d790 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
1d7a0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1d7b0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1d7c0 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
1d7d0 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
1d7e0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
1d7f0 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
1d800 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1d810 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65  t..**.** See the
1d820 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20   header comment 
1d830 6f 6e 20 74 68 65 20 63 6f 6d 70 75 74 65 4c 69  on the computeLi
1d840 6d 69 74 52 65 67 69 73 74 65 72 73 28 29 20 72  mitRegisters() r
1d850 6f 75 74 69 6e 65 20 66 6f 72 20 61 0a 2a 2a 20  outine for a.** 
1d860 64 65 74 61 69 6c 65 64 20 64 65 73 63 72 69 70  detailed descrip
1d870 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 65 61 6e  tion of the mean
1d880 69 6e 67 20 6f 66 20 74 68 65 20 69 4c 69 6d 69  ing of the iLimi
1d890 74 20 61 6e 64 20 69 4f 66 66 73 65 74 20 66 69  t and iOffset fi
1d8a0 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72  elds..**.** addr
1d8b0 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69  OpenEphm[] entri
1d8c0 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61  es contain the a
1d8d0 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65  ddress of OP_Ope
1d8e0 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
1d8f0 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64  es..** These add
1d900 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73  resses must be s
1d910 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65  tored so that we
1d920 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64   can go back and
1d930 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20   fill in.** the 
1d940 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50  P4_KEYINFO and P
1d950 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74  2 parameters lat
1d960 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65  er.  Neither the
1d970 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20   KeyInfo nor.** 
1d980 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1d990 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20  lumns in P2 can 
1d9a0 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74  be computed at t
1d9b0 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20  he same time.** 
1d9c0 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70  as the OP_OpenEp
1d9d0 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  hm instruction i
1d9e0 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20  s coded because 
1d9f0 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e  not.** enough in
1da00 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1da10 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  the compound que
1da20 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74  ry is known at t
1da30 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68  hat point..** Th
1da40 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
1da50 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e  drOpenTran[0] an
1da60 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63  d [1] contains c
1da70 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1da80 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65  es.** for the re
1da90 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b  sult set.  The K
1daa0 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
1dab0 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61  penEphm[2] conta
1dac0 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a  ins collating.**
1dad0 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74   sequences for t
1dae0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1daf0 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  se..*/.struct Se
1db00 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  lect {.  ExprLis
1db10 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20  t *pEList;      
1db20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66  /* The fields of
1db30 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20   the result */. 
1db40 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
1db50 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1db60 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41  f: TK_UNION TK_A
1db70 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20  LL TK_INTERSECT 
1db80 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c  TK_EXCEPT */.  L
1db90 6f 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77  ogEst nSelectRow
1dba0 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
1dbb0 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  ed number of res
1dbc0 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33  ult rows */.  u3
1dbd0 32 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20  2 selFlags;     
1dbe0 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
1dbf0 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  SF_* values */. 
1dc00 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66   int iLimit, iOf
1dc10 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72  fset;   /* Memor
1dc20 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64  y registers hold
1dc30 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53  ing LIMIT & OFFS
1dc40 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  ET counters */. 
1dc50 20 75 33 32 20 73 65 6c 49 64 3b 20 20 20 20 20   u32 selId;     
1dc60 20 20 20 20 20 20 20 20 2f 2a 20 55 6e 69 71 75          /* Uniqu
1dc70 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 75 6d  e identifier num
1dc80 62 65 72 20 66 6f 72 20 74 68 69 73 20 53 45 4c  ber for this SEL
1dc90 45 43 54 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  ECT */.  int add
1dca0 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20  rOpenEphm[2];   
1dcb0 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
1dcc0 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
1dcd0 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
1dce0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
1dcf0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
1dd00 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
1dd10 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
1dd20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1dd30 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
1dd40 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
1dd50 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
1dd60 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
1dd70 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
1dd80 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
1dd90 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
1dda0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1ddb0 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
1ddc0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
1ddd0 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
1dde0 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
1ddf0 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
1de00 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
1de10 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
1de20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
1de30 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
1de40 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
1de50 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
1de60 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
1de70 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
1de80 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
1de90 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
1dea0 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
1deb0 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
1dec0 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63         /* WITH c
1ded0 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74  lause attached t
1dee0 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f  o this select. O
1def0 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23 69 66 6e 64  r NULL. */.#ifnd
1df00 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
1df10 49 4e 44 4f 57 46 55 4e 43 0a 20 20 57 69 6e 64  INDOWFUNC.  Wind
1df20 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20 20  ow *pWin;       
1df30 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 77 69     /* List of wi
1df40 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a  ndow functions *
1df50 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e  /.  Window *pWin
1df60 44 65 66 6e 3b 20 20 20 20 20 20 2f 2a 20 4c 69  Defn;      /* Li
1df70 73 74 20 6f 66 20 6e 61 6d 65 64 20 77 69 6e 64  st of named wind
1df80 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 2a  ow definitions *
1df90 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
1dfa0 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
1dfb0 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c  s for Select.sel
1dfc0 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22  Flags.  The "SF"
1dfd0 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66   prefix stands f
1dfe0 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c  or.** "Select Fl
1dff0 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ag"..**.** Value
1e000 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c   constraints (al
1e010 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73  l checked via as
1e020 73 65 72 74 28 29 29 0a 2a 2a 20 20 20 20 20 53  sert()).**     S
1e030 46 5f 48 61 73 41 67 67 20 20 20 20 20 3d 3d 20  F_HasAgg     == 
1e040 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20  NC_HasAgg.**    
1e050 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 3d   SF_MinMaxAgg  =
1e060 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20  = NC_MinMaxAgg  
1e070 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e     == SQLITE_FUN
1e080 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 20  C_MINMAX.**     
1e090 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 3d 3d  SF_FixedLimit ==
1e0a0 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
1e0b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44  .*/.#define SF_D
1e0c0 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 30 78  istinct       0x
1e0d0 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74  00001  /* Output
1e0e0 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49   should be DISTI
1e0f0 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NCT */.#define S
1e100 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20 20  F_All           
1e110 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49 6e 63   0x00002  /* Inc
1e120 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b 65  ludes the ALL ke
1e130 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
1e140 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20   SF_Resolved    
1e150 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a 20 49     0x00004  /* I
1e160 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20  dentifiers have 
1e170 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f  been resolved */
1e180 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72  .#define SF_Aggr
1e190 65 67 61 74 65 20 20 20 20 20 20 30 78 30 30 30  egate      0x000
1e1a0 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  08  /* Contains 
1e1b0 61 67 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  agg functions or
1e1c0 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23   a GROUP BY */.#
1e1d0 64 65 66 69 6e 65 20 53 46 5f 48 61 73 41 67 67  define SF_HasAgg
1e1e0 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 30           0x00010
1e1f0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
1e200 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1e210 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1e220 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 30  UsesEphemeral  0
1e230 78 30 30 30 32 30 20 20 2f 2a 20 55 73 65 73 20  x00020  /* Uses 
1e240 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  the OpenEphemera
1e250 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66  l opcode */.#def
1e260 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20  ine SF_Expanded 
1e270 20 20 20 20 20 20 30 78 30 30 30 34 30 20 20 2f        0x00040  /
1e280 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  * sqlite3SelectE
1e290 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f  xpand() called o
1e2a0 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e  n this */.#defin
1e2b0 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f  e SF_HasTypeInfo
1e2c0 20 20 20 20 30 78 30 30 30 38 30 20 20 2f 2a 20      0x00080  /* 
1e2d0 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20  FROM subqueries 
1e2e0 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64  have Table metad
1e2f0 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
1e300 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20  F_Compound      
1e310 20 30 78 30 30 31 30 30 20 20 2f 2a 20 50 61 72   0x00100  /* Par
1e320 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t of a compound 
1e330 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65  query */.#define
1e340 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20   SF_Values      
1e350 20 20 20 30 78 30 30 32 30 30 20 20 2f 2a 20 53     0x00200  /* S
1e360 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20  ynthesized from 
1e370 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f  VALUES clause */
1e380 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74  .#define SF_Mult
1e390 69 56 61 6c 75 65 20 20 20 20 20 30 78 30 30 34  iValue     0x004
1e3a0 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41  00  /* Single VA
1e3b0 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d  LUES term with m
1e3c0 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1e3d0 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65  #define SF_Neste
1e3e0 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30 38 30  dFrom     0x0080
1e3f0 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
1e400 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52  parenthesized FR
1e410 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  OM clause */.#de
1e420 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67  fine SF_MinMaxAg
1e430 67 20 20 20 20 20 20 30 78 30 31 30 30 30 20 20  g      0x01000  
1e440 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e  /* Aggregate con
1e450 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72  taining min() or
1e460 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e   max() */.#defin
1e470 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20  e SF_Recursive  
1e480 20 20 20 20 30 78 30 32 30 30 30 20 20 2f 2a 20      0x02000  /* 
1e490 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61  The recursive pa
1e4a0 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76  rt of a recursiv
1e4b0 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  e CTE */.#define
1e4c0 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 20   SF_FixedLimit  
1e4d0 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a 20 6e     0x04000  /* n
1e4e0 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20 62 79  SelectRow set by
1e4f0 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49   a constant LIMI
1e500 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T */.#define SF_
1e510 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 30  MaybeConvert   0
1e520 78 30 38 30 30 30 20 20 2f 2a 20 4e 65 65 64 20  x08000  /* Need 
1e530 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1e540 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1e550 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1e560 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20 30  Converted      0
1e570 78 31 30 30 30 30 20 20 2f 2a 20 42 79 20 63 6f  x10000  /* By co
1e580 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
1e590 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
1e5a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49 6e  */.#define SF_In
1e5b0 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30 78 32  cludeHidden  0x2
1e5c0 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65  0000  /* Include
1e5d0 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
1e5e0 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65  in output */.#de
1e5f0 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c 65 78 52  fine SF_ComplexR
1e600 65 73 75 6c 74 20 20 30 78 34 30 30 30 30 20 20  esult  0x40000  
1e610 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e 74 61 69  /* Result contai
1e620 6e 73 20 73 75 62 71 75 65 72 79 20 6f 72 20 66  ns subquery or f
1e630 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  unction */../*.*
1e640 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66  * The results of
1e650 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65   a SELECT can be
1e660 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20   distributed in 
1e670 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73  several ways, as
1e680 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f   defined.** by o
1e690 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
1e6a0 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65  ing macros.  The
1e6b0 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65   "SRT" prefix me
1e6c0 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75  ans "SELECT Resu
1e6d0 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a  lt.** Type"..**.
1e6e0 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e  **     SRT_Union
1e6f0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1e700 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e  ults as a key in
1e710 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64   a temporary ind
1e720 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ex.**           
1e730 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69            identi
1e740 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69  fied by pDest->i
1e750 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1e760 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20    SRT_Except    
1e770 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73    Remove results
1e780 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72   from the tempor
1e790 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d  ary index pDest-
1e7a0 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1e7b0 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20      SRT_Exists  
1e7c0 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e      Store a 1 in
1e7d0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65   memory cell pDe
1e7e0 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74  st->iSDParm if t
1e7f0 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20  he result.**    
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e810 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74   set is not empt
1e820 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  y..**.**     SRT
1e830 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72  _Discard     Thr
1e840 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ow the results a
1e850 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73  way.  This is us
1e860 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20  ed by SELECT.** 
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
1e890 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77  ithin triggers w
1e8a0 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73  hose only purpos
1e8b0 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  e is.**         
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1e8d0 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20  side-effects of 
1e8e0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
1e8f0 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   All of the abov
1e900 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67  e are free to ig
1e910 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52  nore their ORDER
1e920 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73   BY clause. Thos
1e930 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77  e that.** follow
1e940 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20   must honor the 
1e950 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1e960 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f  .**.**     SRT_O
1e970 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72  utput      Gener
1e980 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74  ate a row of out
1e990 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f  put (using the O
1e9a0 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20  P_ResultRow.**  
1e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9c0 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65     opcode) for e
1e9d0 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72  ach row in the r
1e9e0 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  esult set..**.**
1e9f0 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20       SRT_Mem    
1ea00 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20       Only valid 
1ea10 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1ea20 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1ea30 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1ea40 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74           Store t
1ea50 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  he first column 
1ea60 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73  of the first res
1ea70 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20  ult row.**      
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1ea90 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1eaa0 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61  ->iSDParm then a
1eab0 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a  bandon the rest.
1eac0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ead0 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75         of the qu
1eae0 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69  ery.  This desti
1eaf0 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22  nation implies "
1eb00 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20  LIMIT 1"..**.** 
1eb10 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20      SRT_Set     
1eb20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d      The result m
1eb30 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20  ust be a single 
1eb40 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65  column.  Store e
1eb50 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ach.**          
1eb60 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f             row o
1eb70 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20  f result as the 
1eb80 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65  key in table pDe
1eb90 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
1ebc0 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
1ebd0 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
1ebe0 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1ec00 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
1ec10 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
1ec20 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
1ec30 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
1ec40 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
1ec50 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1ec60 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
1ec70 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
1ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ec90 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
1eca0 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1ecb0 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
1ecc0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ecd0 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
1ece0 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1ecf0 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
1ed00 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1ed20 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
1ed30 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
1ed40 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed60 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
1ed70 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
1ed80 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
1ed90 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
1eda0 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
1edb0 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
1edc0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1edd0 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
1ede0 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
1edf0 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
1ee00 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1ee20 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
1ee30 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1ee40 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1ee50 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
1ee70 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
1ee80 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
1ee90 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
1eea0 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
1eeb0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
1eec0 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
1eed0 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
1eee0 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1eef0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1ef00 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1ef10 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1ef20 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
1ef30 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
1ef40 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
1ef50 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
1ef60 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef80 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
1ef90 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
1efa0 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efc0 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
1efd0 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
1efe0 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
1eff0 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1f000 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
1f010 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1f020 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1f030 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
1f040 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
1f050 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1f060 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1f070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f080 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
1f090 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1f0a0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1f0b0 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
1f0c0 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
1f0d0 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
1f0e0 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
1f0f0 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
1f100 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1f110 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
1f120 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
1f130 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
1f140 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
1f150 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
1f160 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1f170 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1f180 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
1f190 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f1a0 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
1f1b0 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
1f1c0 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
1f1d0 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
1f1e0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f1f0 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
1f200 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
1f210 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
1f220 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1f230 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1f240 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
1f250 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1f270 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
1f280 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
1f290 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
1f2a0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f2b0 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
1f2c0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1f2d0 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
1f2e0 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
1f2f0 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
1f300 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
1f310 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
1f320 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1f330 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
1f340 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
1f350 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
1f360 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
1f370 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
1f380 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
1f390 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
1f3a0 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
1f3b0 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
1f3c0 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
1f3d0 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
1f3e0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
1f3f0 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
1f400 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1f410 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
1f420 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1f430 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1f440 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1f450 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1f460 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
1f470 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
1f480 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1f490 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
1f4a0 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
1f4b0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1f4c0 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
1f4d0 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
1f4e0 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
1f4f0 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
1f500 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1f510 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
1f520 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
1f530 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
1f540 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
1f550 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
1f560 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
1f570 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
1f580 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
1f590 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
1f5a0 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
1f5b0 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
1f5c0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1f5d0 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
1f5e0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1f5f0 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
1f600 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
1f610 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
1f620 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1f630 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
1f640 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1f650 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
1f660 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
1f670 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
1f680 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
1f690 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
1f6a0 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
1f6b0 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
1f6c0 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
1f6d0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1f6e0 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
1f6f0 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
1f700 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1f710 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1f720 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
1f730 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1f740 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
1f750 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
1f760 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
1f770 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
1f780 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
1f790 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
1f7a0 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
1f7b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
1f7c0 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
1f7d0 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
1f7e0 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
1f7f0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72   */.  int iSDPar
1f800 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  m;         /* A 
1f810 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62  parameter used b
1f820 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70  y the eDest disp
1f830 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  osal method */. 
1f840 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20   int iSdst;     
1f850 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
1f860 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73  gister where res
1f870 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e  ults are written
1f880 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b   */.  int nSdst;
1f890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f8a0 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
1f8b0 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20  s allocated */. 
1f8c0 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b   char *zAffSdst;
1f8d0 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
1f8e0 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73  y used when eDes
1f8f0 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  t==SRT_Set */.  
1f900 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1f910 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
1f920 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
1f930 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
1f940 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
1f950 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
1f960 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
1f970 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
1f980 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
1f990 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c  NCREMENT.** tabl
1f9a0 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  es, the followin
1f9b0 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  g information is
1f9c0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1f9d0 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63   Table.u.autoInc
1f9e0 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66  .p.** pointer of
1f9f0 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d   each autoincrem
1fa00 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63  ent table to rec
1fa10 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e  ord some side in
1fa20 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a  formation that.*
1fa30 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  * the code gener
1fa40 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20  ator needs.  We 
1fa50 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72  have to keep per
1fa60 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65  -table autoincre
1fa70 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ment.** informat
1fa80 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65  ion in case inse
1fa90 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74  rts are done wit
1faa0 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54  hin triggers.  T
1fab0 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a  riggers do not.*
1fac0 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64  * normally coord
1fad0 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69  inate their acti
1fae0 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64  vities, but we d
1faf0 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69  o need to coordi
1fb00 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64  nate the.** load
1fb10 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f  ing and saving o
1fb20 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  f autoincrement 
1fb30 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1fb40 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
1fb50 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e  fo {.  AutoincIn
1fb60 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20  fo *pNext;   /* 
1fb70 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  Next info block 
1fb80 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65  in a list of the
1fb90 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65  m all */.  Table
1fba0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
1fbb0 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69   /* Table this i
1fbc0 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73  nfo block refers
1fbd0 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62   to */.  int iDb
1fbe0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1fbf0 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74  * Index in sqlit
1fc00 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61  e3.aDb[] of data
1fc10 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61  base holding pTa
1fc20 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74  b */.  int regCt
1fc30 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1fc40 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20  Memory register 
1fc50 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69  holding the rowi
1fc60 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a  d counter */.};.
1fc70 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
1fc80 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
1fc90 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1fca0 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
1fcb0 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74  ed for each.** t
1fcc0 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20  rigger that may 
1fcd0 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70  be fired while p
1fce0 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  arsing an INSERT
1fcf0 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  , UPDATE or DELE
1fd00 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e  TE.** statement.
1fd10 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74   All such object
1fd20 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
1fd30 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
1fd40 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72  headed at.** Par
1fd50 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61  se.pTriggerPrg a
1fd60 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20  nd deleted once 
1fd70 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c  statement compil
1fd80 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a  ation has been.*
1fd90 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a  * completed..**.
1fda0 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72  ** A Vdbe sub-pr
1fdb0 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65  ogram that imple
1fdc0 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61  ments the body a
1fdd0 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  nd WHEN clause o
1fde0 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69  f trigger.** Tri
1fdf0 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72  ggerPrg.pTrigger
1fe00 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66  , assuming a def
1fe10 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1fe20 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72   clause of.** Tr
1fe30 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c  iggerPrg.orconf,
1fe40 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
1fe50 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72  e TriggerPrg.pPr
1fe60 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a  ogram variable..
1fe70 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72  ** The Parse.pTr
1fe80 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65  iggerPrg list ne
1fe90 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f  ver contains two
1fea0 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68   entries with th
1feb0 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73  e same.** values
1fec0 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67   for both pTrigg
1fed0 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a  er and orconf..*
1fee0 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72  *.** The Trigger
1fef0 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20  Prg.aColmask[0] 
1ff00 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1ff10 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64  to a mask of old
1ff20 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63  .* columns.** ac
1ff30 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74  cessed (or set t
1ff40 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73  o 0 for triggers
1ff50 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75   fired as a resu
1ff60 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20  lt of INSERT.** 
1ff70 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d  statements). Sim
1ff80 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67  ilarly, the Trig
1ff90 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
1ffa0 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  1] variable is s
1ffb0 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20  et to.** a mask 
1ffc0 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
1ffd0 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
1ffe0 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  gram..*/.struct 
1fff0 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54  TriggerPrg {.  T
20000 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
20010 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  ;      /* Trigge
20020 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77  r this program w
20030 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f  as coded from */
20040 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
20050 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
20060 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73  xt entry in Pars
20070 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
20080 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  st */.  SubProgr
20090 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
200a0 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65  /* Program imple
200b0 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72  menting pTrigger
200c0 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74  /orconf */.  int
200d0 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
200e0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
200f0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
20100 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c  cy */.  u32 aCol
20110 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20  mask[2];        
20120 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e  /* Masks of old.
20130 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  *, new.* columns
20140 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a   accessed */.};.
20150 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61  ./*.** The yDbMa
20160 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20  sk datatype for 
20170 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61  the bitmask of a
20180 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
20190 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51  bases..*/.#if SQ
201a0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
201b0 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 75  D>30.  typedef u
201c0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44 62  nsigned char yDb
201d0 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58  Mask[(SQLITE_MAX
201e0 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b  _ATTACHED+9)/8];
201f0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20200 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
20210 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28  M)[(I)/8]&(1<<((
20220 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65  I)&7)))!=0).# de
20230 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
20240 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28  M)      memset((
20250 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a  M),0,sizeof(M)).
20260 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
20270 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b  et(M,I)     (M)[
20280 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29  (I)/8]|=(1<<((I)
20290 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  &7)).# define Db
202a0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
202b0 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
202c0 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e  lZero(M).# defin
202d0 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28  e DbMaskNonZero(
202e0 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d  M)   (sqlite3DbM
202f0 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30  askAllZero(M)==0
20300 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ).#else.  typede
20310 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79  f unsigned int y
20320 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65  DbMask;.# define
20330 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
20340 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44 62      (((M)&(((yDb
20350 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d  Mask)1)<<(I)))!=
20360 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
20370 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28  skZero(M)      (
20380 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  M)=0.# define Db
20390 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
203a0 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b   (M)|=(((yDbMask
203b0 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69  )1)<<(I)).# defi
203c0 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
203d0 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64  (M)   (M)==0.# d
203e0 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
203f0 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a  ero(M)   (M)!=0.
20400 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
20410 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74   SQL parser cont
20420 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20  ext.  A copy of 
20430 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
20440 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68  s passed through
20450 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61  .** the parser a
20460 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c  nd down into all
20470 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69   the parser acti
20480 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  on routine in or
20490 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20  der to.** carry 
204a0 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69  around informati
204b0 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61  on that is globa
204c0 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20  l to the entire 
204d0 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  parse..**.** The
204e0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69   structure is di
204f0 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70  vided into two p
20500 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20  arts.  When the 
20510 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a  parser and code.
20520 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c  ** generate call
20530 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75   themselves recu
20540 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72  rsively, the fir
20550 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  st part of the s
20560 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63  tructure.** is c
20570 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20  onstant but the 
20580 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72  second part is r
20590 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69  eset at the begi
205a0 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66  nning and end of
205b0 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69  .** each recursi
205c0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54  on..**.** The nT
205d0 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61  ableLock and aTa
205e0 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65  bleLock variable
205f0 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20  s are only used 
20600 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  if the shared-ca
20610 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69  che.** feature i
20620 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71  s enabled (if sq
20630 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53  lite3Tsd()->useS
20640 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75  haredData is tru
20650 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20  e). They are.** 
20660 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
20670 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c  e set of table-l
20680 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79  ocks required by
20690 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62   the statement b
206a0 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64  eing.** compiled
206b0 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  . Function sqlit
206c0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73  e3TableLock() is
206d0 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74   used to add ent
206e0 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  ries to the.** l
206f0 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ist..*/.struct P
20700 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  arse {.  sqlite3
20710 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
20720 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   The main databa
20730 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
20740 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b    char *zErrMsg;
20750 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72         /* An err
20760 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
20770 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20  Vdbe *pVdbe;    
20780 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e       /* An engin
20790 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20  e for executing 
207a0 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64  database bytecod
207b0 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  e */.  int rc;  
207c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
207d0 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
207e0 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75  execution */.  u
207f0 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20  8 colNamesSet;  
20800 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65      /* TRUE afte
20810 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20  r OP_ColumnName 
20820 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20  has been issued 
20830 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38  to pVdbe */.  u8
20840 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20   checkSchema;   
20850 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68     /* Causes sch
20860 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b  ema cookie check
20870 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
20880 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20  */.  u8 nested; 
20890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
208a0 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
208b0 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65  lls to the parse
208c0 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  r/code generator
208d0 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65   */.  u8 nTempRe
208e0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  g;         /* Nu
208f0 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72  mber of temporar
20900 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61  y registers in a
20910 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75  TempReg[] */.  u
20920 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20  8 isMultiWrite; 
20930 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
20940 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64  tatement may mod
20950 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69  ify/insert multi
20960 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38  ple rows */.  u8
20970 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20   mayAbort;      
20980 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
20990 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f  atement may thro
209a0 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
209b0 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73  tion */.  u8 has
209c0 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f  Compound;      /
209d0 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65  * Need to invoke
209e0 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
209f0 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
20a00 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e  () */.  u8 okCon
20a10 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20  stFactor;    /* 
20a20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74  OK to factor out
20a30 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20   constants */.  
20a40 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73  u8 disableLookas
20a50 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ide; /* Number o
20a60 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64  f times lookasid
20a70 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 62  e has been disab
20a80 6c 65 64 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  led */.  u8 disa
20a90 62 6c 65 56 74 61 62 3b 20 20 20 20 20 20 2f 2a  bleVtab;      /*
20aa0 20 44 69 73 61 62 6c 65 20 61 6c 6c 20 76 69 72   Disable all vir
20ab0 74 75 61 6c 20 74 61 62 6c 65 73 20 66 6f 72 20  tual tables for 
20ac0 74 68 69 73 20 70 61 72 73 65 20 2a 2f 0a 20 20  this parse */.  
20ad0 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20  int nRangeReg;  
20ae0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
20af0 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65  the temporary re
20b00 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
20b10 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b    int iRangeReg;
20b20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
20b30 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70  register in temp
20b40 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
20b50 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  lock */.  int nE
20b60 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
20b70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
20b80 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
20b90 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20   nTab;          
20ba0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
20bb0 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61  reviously alloca
20bc0 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73  ted VDBE cursors
20bd0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
20be0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20bf0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
20c00 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72  ells used so far
20c10 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c   */.  int szOpAl
20c20 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79  loc;       /* By
20c30 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  tes of memory sp
20c40 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ace allocated fo
20c50 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a  r Vdbe.aOp[] */.
20c60 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20    int iSelfTab; 
20c70 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
20c80 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
20c90 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78 70 72  an index on expr
20ca0 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20  , or negative.  
20cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cc0 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 62       ** of the b
20cd0 61 73 65 20 72 65 67 69 73 74 65 72 20 64 75 72  ase register dur
20ce0 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74 72  ing check-constr
20cf0 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20 69  aint eval */.  i
20d00 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20  nt nLabel;      
20d10 20 20 20 20 2f 2a 20 54 68 65 20 2a 6e 65 67 61      /* The *nega
20d20 74 69 76 65 2a 20 6f 66 20 74 68 65 20 6e 75 6d  tive* of the num
20d30 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73  ber of labels us
20d40 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  ed */.  int nLab
20d50 65 6c 41 6c 6c 6f 63 3b 20 20 20 20 20 2f 2a 20  elAlloc;     /* 
20d60 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20  Number of slots 
20d70 69 6e 20 61 4c 61 62 65 6c 20 2a 2f 0a 20 20 69  in aLabel */.  i
20d80 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20  nt *aLabel;     
20d90 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20      /* Space to 
20da0 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20  hold the labels 
20db0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
20dc0 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e  ConstExpr;/* Con
20dd0 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
20de0 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e  s */.  Token con
20df0 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e  straintName;/* N
20e00 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  ame of the const
20e10 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  raint currently 
20e20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a  being parsed */.
20e30 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d    yDbMask writeM
20e40 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20  ask;   /* Start 
20e50 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  a write transact
20e60 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74  ion on these dat
20e70 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d  abases */.  yDbM
20e80 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20  ask cookieMask; 
20e90 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73   /* Bitmask of s
20ea0 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64  chema verified d
20eb0 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e  atabases */.  in
20ec0 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20  t regRowid;     
20ed0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
20ee0 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20  olding rowid of 
20ef0 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74  CREATE TABLE ent
20f00 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  ry */.  int regR
20f10 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  oot;         /* 
20f20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
20f30 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
20f40 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74  r for new object
20f50 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41  s */.  int nMaxA
20f60 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  rg;         /* M
20f70 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74  ax args passed t
20f80 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  o user function 
20f90 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  by sub-program *
20fa0 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b  /.  int nSelect;
20fb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20fc0 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 6d  er of SELECT stm
20fd0 74 73 2e 20 43 6f 75 6e 74 65 72 20 66 6f 72 20  ts. Counter for 
20fe0 53 65 6c 65 63 74 2e 73 65 6c 49 64 20 2a 2f 0a  Select.selId */.
20ff0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21000 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
21010 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
21020 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
21030 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
21040 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
21050 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
21060 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
21070 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
21080 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
21090 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
210a0 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
210b0 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
210c0 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
210d0 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
210e0 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54  s */.  Parse *pT
210f0 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50  oplevel;    /* P
21100 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66  arse structure f
21110 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20  or main program 
21120 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54  (or NULL) */.  T
21130 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61  able *pTriggerTa
21140 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69  b;  /* Table tri
21150 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20  ggers are being 
21160 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69  coded for */.  i
21170 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20  nt addrCrTab;   
21180 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
21190 66 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65  f OP_CreateBtree
211a0 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54   opcode on CREAT
211b0 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32  E TABLE */.  u32
211c0 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20   nQueryLoop;    
211d0 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20    /* Est number 
211e0 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
211f0 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67   a query (10*log
21200 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f  2(N)) */.  u32 o
21210 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ldmask;         
21220 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a  /* Mask of old.*
21230 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
21240 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77  ced */.  u32 new
21250 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
21260 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   Mask of new.* c
21270 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
21280 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67  d */.  u8 eTrigg
21290 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54  erOp;       /* T
212a0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
212b0 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45  ERT or TK_DELETE
212c0 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66   */.  u8 eOrconf
212d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ;          /* De
212e0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
212f0 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69  T policy for tri
21300 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20  gger steps */.  
21310 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65  u8 disableTrigge
21320 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  rs;  /* True to 
21330 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73  disable triggers
21340 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
21350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21390 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73 20 61  **.  ** Fields a
213a0 62 6f 76 65 20 6d 75 73 74 20 62 65 20 69 6e 69  bove must be ini
213b0 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f  tialized to zero
213c0 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20 74 68  .  The fields th
213d0 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20  at follow,.  ** 
213e0 64 6f 77 6e 20 74 6f 20 74 68 65 20 62 65 67 69  down to the begi
213f0 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65 63  nning of the rec
21400 75 72 73 69 76 65 20 73 65 63 74 69 6f 6e 2c 20  ursive section, 
21410 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
21420 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a  e.  ** initializ
21430 65 64 20 61 73 20 74 68 65 79 20 77 69 6c 6c 20  ed as they will 
21440 62 65 20 73 65 74 20 62 65 66 6f 72 65 20 62 65  be set before be
21450 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 20 62  ing used.  The b
21460 6f 75 6e 64 61 72 79 20 69 73 0a 20 20 2a 2a 20  oundary is.  ** 
21470 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6f 66  determined by of
21480 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 54 65  fsetof(Parse,aTe
21490 6d 70 52 65 67 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a  mpReg)..  ******
214a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
214b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
214c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
214d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
214e0 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 61 54 65  ****/..  int aTe
214f0 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 20 20  mpReg[8];       
21500 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61   /* Holding area
21510 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72   for temporary r
21520 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f  egisters */.  To
21530 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
21540 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77        /* Token w
21550 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20  ith unqualified 
21560 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61  schema object na
21570 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  me */..  /******
21580 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21590 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215c0 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73  **.  ** Above is
215d0 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65   constant betwee
215e0 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42  n recursions.  B
215f0 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65  elow is reset be
21600 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20  fore and after. 
21610 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69   ** each recursi
21620 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  on.  The boundar
21630 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20  y between these 
21640 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64  two regions is d
21650 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75  etermined.  ** u
21660 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61  sing offsetof(Pa
21670 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20  rse,sLastToken) 
21680 73 6f 20 74 68 65 20 73 4c 61 73 74 54 6f 6b 65  so the sLastToke
21690 6e 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20  n field must be 
216a0 74 68 65 0a 20 20 2a 2a 20 66 69 72 73 74 20 66  the.  ** first f
216b0 69 65 6c 64 20 69 6e 20 74 68 65 20 72 65 63 75  ield in the recu
216c0 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20  rsive region..  
216d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21710 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b  ********/..  Tok
21720 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
21730 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74       /* The last
21740 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f   token parsed */
21750 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20  .  ynVar nVar;  
21760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21770 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61  Number of '?' va
21780 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20  riables seen in 
21790 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a  the SQL so far *
217a0 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72  /.  u8 iPkSortOr
217b0 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
217c0 20 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72   ASC or DESC for
217d0 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
217e0 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70   KEY */.  u8 exp
217f0 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lain;           
21800 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
21810 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20  he EXPLAIN flag 
21820 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20  is found on the 
21830 71 75 65 72 79 20 2a 2f 0a 23 69 66 20 21 28 64  query */.#if !(d
21840 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
21850 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
21860 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
21870 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
21880 4c 45 29 29 0a 20 20 75 38 20 65 50 61 72 73 65  LE)).  u8 eParse
21890 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
218a0 20 2f 2a 20 50 41 52 53 45 5f 4d 4f 44 45 5f 58   /* PARSE_MODE_X
218b0 58 58 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23  XX constant */.#
218c0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
218d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
218e0 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 74  LTABLE.  int nVt
218f0 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
21900 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21910 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
21920 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  o lock */.#endif
21930 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
21940 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21950 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
21960 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
21970 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
21980 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21990 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
219a0 74 20 61 64 64 72 45 78 70 6c 61 69 6e 3b 20 20  t addrExplain;  
219b0 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65          /* Addre
219c0 73 73 20 6f 66 20 63 75 72 72 65 6e 74 20 4f 50  ss of current OP
219d0 5f 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20  _Explain opcode 
219e0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69 73  */.#endif.  VLis
219f0 74 20 2a 70 56 4c 69 73 74 3b 20 20 20 20 20 20  t *pVList;      
21a00 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
21a10 20 62 65 74 77 65 65 6e 20 76 61 72 69 61 62 6c   between variabl
21a20 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62  e names and numb
21a30 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  ers */.  Vdbe *p
21a40 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20  Reprepare;      
21a50 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72     /* VM being r
21a60 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74  eprepared (sqlit
21a70 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a  e3Reprepare()) *
21a80 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
21a90 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a  zTail;        /*
21aa0 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61   All SQL text pa
21ab0 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69  st the last semi
21ac0 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a  colon parsed */.
21ad0 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62    Table *pNewTab
21ae0 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  le;         /* A
21af0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e   table being con
21b00 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41  structed by CREA
21b10 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 49 6e  TE TABLE */.  In
21b20 64 65 78 20 2a 70 4e 65 77 49 6e 64 65 78 3b 20  dex *pNewIndex; 
21b30 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 69 6e          /* An in
21b40 64 65 78 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  dex being constr
21b50 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
21b60 49 4e 44 45 58 2e 0a 20 20 20 20 20 20 20 20 20  INDEX..         
21b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b80 20 20 20 2a 2a 20 41 6c 73 6f 20 75 73 65 64 20     ** Also used 
21b90 74 6f 20 68 6f 6c 64 20 72 65 64 75 6e 64 61 6e  to hold redundan
21ba0 74 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  t UNIQUE constra
21bb0 69 6e 74 73 0a 20 20 20 20 20 20 20 20 20 20 20  ints.           
21bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bd0 20 2a 2a 20 64 75 72 69 6e 67 20 61 20 52 45 4e   ** during a REN
21be0 41 4d 45 20 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  AME COLUMN */.  
21bf0 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69  Trigger *pNewTri
21c00 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69  gger;     /* Tri
21c10 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74  gger under const
21c20 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45  ruct by a CREATE
21c30 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f   TRIGGER */.  co
21c40 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
21c50 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
21c60 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
21c70 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
21c80 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  cks */.#ifndef S
21c90 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21ca0 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
21cb0 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
21cc0 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
21cd0 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
21ce0 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
21cf0 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
21d00 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
21d10 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
21d20 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
21d30 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
21d40 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
21d50 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
21d60 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
21d70 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
21d80 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
21d90 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
21da0 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
21db0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
21dc0 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
21dd0 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
21de0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21df0 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
21e00 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
21e10 20 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46    With *pWithToF
21e20 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46  ree;        /* F
21e30 72 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62  ree this WITH ob
21e40 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20  ject at the end 
21e50 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a  of the parse */.
21e60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21e70 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
21e80 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a 70 52   RenameToken *pR
21e90 65 6e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 54 6f  ename;     /* To
21ea0 6b 65 6e 73 20 73 75 62 6a 65 63 74 20 74 6f 20  kens subject to 
21eb0 72 65 6e 61 6d 69 6e 67 20 62 79 20 41 4c 54 45  renaming by ALTE
21ec0 52 20 54 41 42 4c 45 20 2a 2f 0a 23 65 6e 64 69  R TABLE */.#endi
21ed0 66 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 50 41  f.};..#define PA
21ee0 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 20  RSE_MODE_NORMAL 
21ef0 20 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65         0.#define
21f00 20 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c   PARSE_MODE_DECL
21f10 41 52 45 5f 56 54 41 42 20 20 31 0a 23 64 65 66  ARE_VTAB  1.#def
21f20 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 52  ine PARSE_MODE_R
21f30 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32 0a 23  ENAME_COLUMN 2.#
21f40 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
21f50 45 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45 20 20  E_RENAME_TABLE  
21f60 33 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61  3../*.** Sizes a
21f70 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76  nd pointers of v
21f80 61 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20  arious parts of 
21f90 74 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74  the Parse object
21fa0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  ..*/.#define PAR
21fb0 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74  SE_HDR_SZ offset
21fc0 6f 66 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65  of(Parse,aTempRe
21fd0 67 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20  g) /* Recursive 
21fe0 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63  part w/o aColCac
21ff0 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  he*/.#define PAR
22000 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66  SE_RECURSE_SZ of
22010 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
22020 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52  stToken)    /* R
22030 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
22040 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
22050 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50  AIL_SZ (sizeof(P
22060 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55  arse)-PARSE_RECU
22070 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72  RSE_SZ) /* Non-r
22080 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
22090 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
220a0 41 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29  AIL(X) (((char*)
220b0 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52  (X))+PARSE_RECUR
220c0 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74  SE_SZ)  /* Point
220d0 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f  er to tail */../
220e0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
220f0 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
22100 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  side an sqlite3_
22110 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63  declare_vtab() c
22120 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  all..*/.#ifdef S
22130 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
22140 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
22150 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
22160 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
22170 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
22180 54 41 42 20 28 70 50 61 72 73 65 2d 3e 65 50 61  TAB (pParse->ePa
22190 72 73 65 4d 6f 64 65 3d 3d 50 41 52 53 45 5f 4d  rseMode==PARSE_M
221a0 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42  ODE_DECLARE_VTAB
221b0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ).#endif..#if de
221c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
221d0 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20  T_ALTERTABLE).  
221e0 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e 41 4d  #define IN_RENAM
221f0 45 5f 4f 42 4a 45 43 54 20 30 0a 23 65 6c 73 65  E_OBJECT 0.#else
22200 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45  .  #define IN_RE
22210 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 28 70 50 61  NAME_OBJECT (pPa
22220 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3e  rse->eParseMode>
22230 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41  =PARSE_MODE_RENA
22240 4d 45 5f 43 4f 4c 55 4d 4e 29 0a 23 65 6e 64 69  ME_COLUMN).#endi
22250 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
22260 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
22270 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69  ALTABLE) && defi
22280 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22290 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20 23 64  ALTERTABLE).  #d
222a0 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49 41 4c  efine IN_SPECIAL
222b0 5f 50 41 52 53 45 20 30 0a 23 65 6c 73 65 0a 20  _PARSE 0.#else. 
222c0 20 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43   #define IN_SPEC
222d0 49 41 4c 5f 50 41 52 53 45 20 28 70 50 61 72 73  IAL_PARSE (pPars
222e0 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 21 3d 50  e->eParseMode!=P
222f0 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41 4c  ARSE_MODE_NORMAL
22300 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
22310 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
22320 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
22330 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65  ucture can be de
22340 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63  clared on a stac
22350 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  k and used.** to
22360 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e   save the Parse.
22370 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c  zAuthContext val
22380 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ue so that it ca
22390 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61  n be restored la
223a0 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ter..*/.struct A
223b0 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63  uthContext {.  c
223c0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
223d0 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75  Context;   /* Pu
223e0 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41  t saved Parse.zA
223f0 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20  uthContext here 
22400 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
22410 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
22420 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74   /* The Parse st
22430 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f  ructure */.};../
22440 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c  *.** Bitfield fl
22450 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65  ags for P5 value
22460 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f   in various opco
22470 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  des..**.** Value
22480 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
22490 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
224a0 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c  t()):.**    OPFL
224b0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
224c0 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  == SQLITE_FUNC_L
224d0 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c  ENGTH.**    OPFL
224e0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
224f0 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  == SQLITE_FUNC_T
22500 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c  YPEOF.**    OPFL
22510 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
22520 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  == BTREE_BULKLOA
22530 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  D.**    OPFLAG_S
22540 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42  EEKEQ       == B
22550 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20  TREE_SEEK_EQ.** 
22560 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c     OPFLAG_FORDEL
22570 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
22580 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20  FORDELETE.**    
22590 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
225a0 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56  ION == BTREE_SAV
225b0 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20  EPOSITION.**    
225c0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
225d0 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58      == BTREE_AUX
225e0 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e  DELETE.*/.#defin
225f0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
22600 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
22610 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74  * OP_Insert: Set
22620 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
22630 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20  Change */.      
22640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22660 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50  * Also used in P
22670 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50  2 (not P5) of OP
22680 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69  _Delete */.#defi
22690 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47  ne OPFLAG_NOCHNG
226a0 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
226b0 2f 2a 20 4f 50 5f 56 43 6f 6c 75 6d 6e 20 6e 6f  /* OP_VColumn no
226c0 63 68 61 6e 67 65 20 66 6f 72 20 55 50 44 41 54  change for UPDAT
226d0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
226e0 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20  LAG_EPHEM       
226f0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
22700 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61  Column: Ephemera
22710 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a  l output is ok *
22720 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22730 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
22740 78 32 30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x20    /* Set to
22750 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
22760 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
22770 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
22780 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
22790 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
227a0 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
227b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
227c0 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
227d0 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
227e0 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
227f0 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
22800 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
22810 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
22820 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
22830 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
22840 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
22850 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e  efine OPFLAG_ISN
22860 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34 30 20  OOP        0x40 
22870 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20     /* OP_Delete 
22880 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d  does pre-update-
22890 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  hook only */.#de
228a0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  fine OPFLAG_LENG
228b0 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20  THARG     0x40  
228c0 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
228d0 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e  nly used for len
228e0 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  gth() */.#define
228f0 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
22900 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a  G     0x80    /*
22910 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
22920 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  used for typeof(
22930 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
22940 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20  LAG_BULKCSR     
22950 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
22960 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f  Open** used to o
22970 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20  pen bulk cursor 
22980 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22990 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20  G_SEEKEQ        
229a0 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x02    /* OP_Op
229b0 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73  en** cursor uses
229c0 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f   EQ seek only */
229d0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
229e0 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30 78  FORDELETE     0x
229f0 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  08    /* OP_Open
22a00 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45   should use BTRE
22a10 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23  E_FORDELETE */.#
22a20 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32  define OPFLAG_P2
22a30 49 53 52 45 47 20 20 20 20 20 20 20 30 78 31 30  ISREG       0x10
22a40 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f      /* P2 to OP_
22a50 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69  Open** is a regi
22a60 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23  ster number */.#
22a70 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45  define OPFLAG_PE
22a80 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31  RMUTE       0x01
22a90 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72      /* OP_Compar
22aa0 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75  e: use the permu
22ab0 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  tation */.#defin
22ac0 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  e OPFLAG_SAVEPOS
22ad0 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f  ITION  0x02    /
22ae0 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65  * OP_Delete/Inse
22af0 72 74 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20  rt: save cursor 
22b00 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  pos */.#define O
22b10 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20  PFLAG_AUXDELETE 
22b20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f      0x04    /* O
22b30 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20  P_Delete: index 
22b40 69 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a  in a DELETE op *
22b50 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22b60 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 20 30  _NOCHNG_MAGIC  0
22b70 78 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d 61 6b  x6d    /* OP_Mak
22b80 65 52 65 63 6f 72 64 3a 20 73 65 72 69 61 6c 74  eRecord: serialt
22b90 79 70 65 20 31 30 20 69 73 20 6f 6b 20 2a 2f 0a  ype 10 is ok */.
22ba0 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
22bb0 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
22bc0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
22bd0 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
22be0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
22bf0 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
22c00 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73  .. *. * Pointers
22c10 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66   to instances of
22c20 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
22c30 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77  are stored in tw
22c40 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e  o ways.. * 1. In
22c50 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20   the "trigHash" 
22c60 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74  hash table (part
22c70 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a   of the sqlite3*
22c80 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73   that represents
22c90 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62   the. *    datab
22ca0 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
22cb0 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
22cc0 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
22cd0 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
22ce0 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
22cf0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
22d00 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
22d10 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
22d20 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
22d30 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
22d40 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
22d50 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
22d60 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
22d70 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
22d80 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
22d90 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
22da0 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
22db0 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
22dc0 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
22dd0 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
22de0 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
22df0 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
22e00 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
22e10 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
22e20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
22e30 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
22e40 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
22e50 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
22e60 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
22e70 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
22e80 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
22e90 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
22ea0 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ec0 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
22ed0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
22ee0 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
22ef0 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
22f00 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
22f10 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
22f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22f30 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
22f40 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
22f50 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
22f60 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22f80 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
22f90 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
22fa0 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
22fb0 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
22fc0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
22fd0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
22fe0 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
22ff0 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
23000 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
23010 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
23020 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
23030 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
23040 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23060 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
23070 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
23080 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
23090 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
230a0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
230b0 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
230c0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
230d0 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
230e0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
230f0 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
23100 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
23110 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
23120 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
23130 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
23140 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
23150 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
23160 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
23170 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
23180 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
23190 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
231a0 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
231b0 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
231c0 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
231d0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
231e0 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
231f0 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a  termine which..*
23200 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
23210 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
23220 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
23230 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
23240 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
23250 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
23260 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
23270 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
23280 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
23290 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
232a0 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
232b0 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
232c0 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
232d0 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
232e0 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
232f0 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
23300 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
23310 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
23320 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
23330 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20  -program.. *. * 
23340 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
23350 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
23360 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
23370 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
23380 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
23390 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
233a0 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
233b0 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
233c0 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
233d0 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65  the. * associate
233e0 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  d struct Trigger
233f0 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66   instance. The f
23400 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
23410 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
23420 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20  is. * the first 
23430 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67  step of the trig
23440 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a  ger-program.. *.
23450 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62   * The "op" memb
23460 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65  er indicates whe
23470 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22  ther this is a "
23480 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54  DELETE", "INSERT
23490 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20  ", "UPDATE" or. 
234a0 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65  * "SELECT" state
234b0 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e  ment. The meanin
234c0 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20  gs of the other 
234d0 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72  members is deter
234e0 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20  mined by the. * 
234f0 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73  value of "op" as
23500 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20   follows:. *. * 
23510 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54  (op == TK_INSERT
23520 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d  ). * orconf    -
23530 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20  > stores the ON 
23540 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
23550 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20  hm. * pSelect   
23560 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
23570 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
23580 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74   SELECT ... stat
23590 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
235a0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
235b0 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65   stores a pointe
235c0 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20  r to the SELECT 
235d0 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72  statement. Other
235e0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54  wise NULL.. * zT
235f0 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
23600 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
23610 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20  table to insert 
23620 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69  into.. * pExprLi
23630 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73  st -> If this is
23640 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
23650 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73  ... VALUES ... s
23660 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
23670 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
23680 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65  his stores value
23690 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
236a0 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
236b0 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d  .. * pIdList   -
236c0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
236d0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
236e0 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29  (<column-names>)
236f0 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20   VALUES .... *  
23700 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
23710 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73  ement, then this
23720 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75   stores the colu
23730 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20  mn-names to be. 
23740 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  *              i
23750 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a  nserted into.. *
23760 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45  . * (op == TK_DE
23770 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  LETE). * zTarget
23780 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
23790 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
237a0 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
237b0 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
237c0 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
237d0 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
237e0 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
237f0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
23800 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
23810 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
23820 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55  *. * (op == TK_U
23830 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65  PDATE). * zTarge
23840 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
23850 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
23860 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20  e to update.. * 
23870 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
23880 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
23890 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
238a0 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
238b0 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
238c0 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
238d0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45  wise NULL.. * pE
238e0 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73  xprList -> A lis
238f0 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  t of the columns
23900 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74   to update and t
23910 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  he expressions t
23920 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20  o update. *     
23930 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f           them to
23940 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64  . See sqlite3Upd
23950 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74  ate() documentat
23960 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73  ion of "pChanges
23970 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  ". *            
23980 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20    argument.. *. 
23990 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
239a0 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b  rStep {.  u8 op;
239b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
239c0 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
239d0 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
239e0 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c  K_INSERT, TK_SEL
239f0 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f  ECT */.  u8 orco
23a00 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nf;           /*
23a10 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63   OE_Rollback etc
23a20 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  . */.  Trigger *
23a30 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54  pTrig;      /* T
23a40 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20  he trigger that 
23a50 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70  this step is a p
23a60 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65  art of */.  Sele
23a70 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
23a80 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
23a90 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49  ment or RHS of I
23aa0 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43  NSERT INTO SELEC
23ab0 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20  T ... */.  char 
23ac0 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20  *zTarget;       
23ad0 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20  /* Target table 
23ae0 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
23af0 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  TE, INSERT */.  
23b00 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
23b10 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
23b20 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c  E clause for DEL
23b30 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
23b40 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
23b50 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
23b60 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20   SET clause for 
23b70 55 50 44 41 54 45 20 2a 2f 0a 20 20 49 64 4c 69  UPDATE */.  IdLi
23b80 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20  st *pIdList;    
23b90 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73   /* Column names
23ba0 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20   for INSERT */. 
23bb0 20 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74   Upsert *pUpsert
23bc0 3b 20 20 20 20 20 2f 2a 20 55 70 73 65 72 74 20  ;     /* Upsert 
23bd0 63 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20 49 4e  clauses on an IN
23be0 53 45 52 54 20 2a 2f 0a 20 20 63 68 61 72 20 2a  SERT */.  char *
23bf0 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 2f  zSpan;         /
23c00 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74  * Original SQL t
23c10 65 78 74 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d  ext of this comm
23c20 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  and */.  Trigger
23c30 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  Step *pNext;  /*
23c40 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e   Next in the lin
23c50 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67  k-list */.  Trig
23c60 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20  gerStep *pLast; 
23c70 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74   /* Last element
23c80 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56   in link-list. V
23c90 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65  alid for 1st ele
23ca0 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  m only */.};../*
23cb0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
23cc0 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
23cd0 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
23ce0 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c   used by the sql
23cf0 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75  iteFix....** rou
23d00 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61  tines as they wa
23d10 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65  lk the parse tre
23d20 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61  e to make databa
23d30 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a  se references.**
23d40 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79   explicit..*/.ty
23d50 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46  pedef struct DbF
23d60 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74  ixer DbFixer;.st
23d70 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20  ruct DbFixer {. 
23d80 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
23d90 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
23da0 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72  ing context.  Er
23db0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69  ror messages wri
23dc0 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53  tten here */.  S
23dd0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
23de0 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20     /* Fix items 
23df0 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  to this schema *
23e00 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79  /.  int bVarOnly
23e10 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b  ;       /* Check
23e20 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65   for variable re
23e30 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f  ferences only */
23e40 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
23e50 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  Db;    /* Make s
23e60 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20  ure all objects 
23e70 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  are contained in
23e80 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
23e90 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
23ea0 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20  zType;  /* Type 
23eb0 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
23ec0 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
23ed0 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20  r messages */.  
23ee0 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61  const Token *pNa
23ef0 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  me; /* Name of t
23f00 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
23f10 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
23f20 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ssages */.};../*
23f30 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20  .** An objected 
23f40 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61  used to accumula
23f50 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  te the text of a
23f60 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65   string where we
23f70 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73  .** do not neces
23f80 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20  sarily know how 
23f90 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77  big the string w
23fa0 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e  ill be in the en
23fb0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c  d..*/.struct sql
23fc0 69 74 65 33 5f 73 74 72 20 7b 0a 20 20 73 71 6c  ite3_str {.  sql
23fd0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
23fe0 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61    /* Optional da
23ff0 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61  tabase for looka
24000 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55  side.  Can be NU
24010 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  LL */.  char *zT
24020 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
24030 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
24040 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
24050 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20   u32  nAlloc;   
24060 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20        /* Amount 
24070 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  of space allocat
24080 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20  ed in zText */. 
24090 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20   u32  mxAlloc;  
240a0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
240b0 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74   allowed allocat
240c0 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d  ion.  0 for no m
240d0 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20  alloc usage */. 
240e0 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20   u32  nChar;    
240f0 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
24100 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
24110 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61   far */.  u8   a
24120 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f  ccError;       /
24130 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 6f  * SQLITE_NOMEM o
24140 72 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20  r SQLITE_TOOBIG 
24150 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66  */.  u8   printf
24160 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c  Flags;    /* SQL
24170 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73  ITE_PRINTF flags
24180 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65   below */.};.#de
24190 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
241a0 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31  TF_INTERNAL 0x01
241b0 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73    /* Internal-us
241c0 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72  e-only converter
241d0 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65  s allowed */.#de
241e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
241f0 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32  TF_SQLFUNC  0x02
24200 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f    /* SQL functio
24210 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56  n arguments to V
24220 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69  XPrintf */.#defi
24230 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
24240 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20  _MALLOCED 0x04  
24250 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65 78 74  /* True if xText
24260 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70   is allocated sp
24270 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ace */..#define 
24280 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28  isMalloced(X)  (
24290 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67  ((X)->printfFlag
242a0 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  s & SQLITE_PRINT
242b0 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a  F_MALLOCED)!=0).
242c0 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65  ../*.** A pointe
242d0 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
242e0 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63  ure is used to c
242f0 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72  ommunicate infor
24300 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73  mation.** from s
24310 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f  qlite3Init and O
24320 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e  P_ParseSchema in
24330 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
24340 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
24350 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
24360 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
24370 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
24380 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
24390 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
243a0 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
243b0 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
243c0 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
243d0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
243e0 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20         /* 0 for 
243f0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
24400 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20  1 for TEMP, 2.. 
24410 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a  for ATTACHed */.
24420 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
24430 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
24440 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65  code stored here
24450 20 2a 2f 0a 20 20 75 33 32 20 6d 49 6e 69 74 46   */.  u32 mInitF
24460 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
24470 67 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 65  gs controlling e
24480 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
24490 0a 20 20 75 33 32 20 6e 49 6e 69 74 52 6f 77 3b  .  u32 nInitRow;
244a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
244b0 20 6f 66 20 72 6f 77 73 20 70 72 6f 63 65 73 73   of rows process
244c0 65 64 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61  ed */.} InitData
244d0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
244e0 20 76 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e 69   values for mIni
244f0 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e  tFlags.*/.#defin
24500 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72  e INITFLAG_Alter
24510 54 61 62 6c 65 20 20 20 30 78 30 30 30 31 20 20  Table   0x0001  
24520 2f 2a 20 54 68 69 73 20 69 73 20 61 20 72 65 70  /* This is a rep
24530 61 72 73 65 20 61 66 74 65 72 20 41 4c 54 45 52  arse after ALTER
24540 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   TABLE */../*.**
24550 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
24560 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
24570 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
24580 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
24590 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
245a0 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
245b0 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
245c0 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
245d0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
245e0 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
245f0 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
24600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24610 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
24620 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
24630 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
24640 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
24650 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24660 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
24670 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
24680 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
246a0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
246b0 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
246c0 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69  /.  int bOpenUri
246d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
246e0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
246f0 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
24700 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
24710 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20    int bUseCis;  
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24730 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72      /* Use cover
24740 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20  ing indices for 
24750 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20  full-scans */.  
24760 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63  int bSmallMalloc
24770 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24780 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67 65    /* Avoid large
24790 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
247a0 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ons if true */. 
247b0 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20   int mxStrlen;  
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247d0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74     /* Maximum st
247e0 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
247f0 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70   int neverCorrup
24800 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24810 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69     /* Database i
24820 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f  s always well-fo
24830 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  rmed */.  int sz
24840 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
24850 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
24860 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
24870 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a   buffer size */.
24880 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65    int nLookaside
24890 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
248a0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
248b0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
248c0 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  count */.  int n
248d0 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20  StmtSpill;      
248e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
248f0 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69  Stmt-journal spi
24900 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73  ll-to-disk thres
24910 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65  hold */.  sqlite
24920 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b  3_mem_methods m;
24930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
24940 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
24950 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72  allocation inter
24960 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
24970 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
24980 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c  mutex;      /* L
24990 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69  ow-level mutex i
249a0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
249b0 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
249c0 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20  hods2 pcache2;  
249d0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67  /* Low-level pag
249e0 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63  e-cache interfac
249f0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65  e */.  void *pHe
24a00 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
24a10 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70           /* Heap
24a20 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a   storage space *
24a30 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20  /.  int nHeap;  
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 53 69 7a 65 20 6f 66        /* Size of
24a60 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e   pHeap[] */.  in
24a70 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20  t mnReq, mxReq; 
24a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a90 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68  /* Min and max h
24aa0 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a  eap requests siz
24ab0 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  es */.  sqlite3_
24ac0 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20  int64 szMmap;   
24ad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61            /* mma
24ae0 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70  p() space per op
24af0 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c  en file */.  sql
24b00 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61  ite3_int64 mxMma
24b10 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
24b20 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  * Maximum value 
24b30 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20  for szMmap */.  
24b40 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20  void *pPage;    
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
24b70 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
24b80 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  szPage;         
24b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24ba0 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61   Size of each pa
24bb0 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  ge in pPage[] */
24bc0 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20  .  int nPage;   
24bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24be0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
24bf0 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65  f pages in pPage
24c00 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61  [] */.  int mxPa
24c10 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20  rserStack;      
24c20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78            /* max
24c30 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68  imum depth of th
24c40 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a  e parser stack *
24c50 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61  /.  int sharedCa
24c60 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  cheEnabled;     
24c70 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66        /* true if
24c80 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
24c90 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  de enabled */.  
24ca0 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20  u32 szPma;      
24cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cc0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72    /* Maximum Sor
24cd0 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a  ter PMA size */.
24ce0 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
24cf0 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
24d00 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
24d10 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
24d20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
24d30 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
24d40 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
24d50 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d70 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
24d80 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
24d90 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
24da0 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
24db0 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
24dc0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24dd0 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
24de0 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
24df0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
24e00 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
24e10 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24e20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
24e30 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
24e40 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
24e50 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
24e60 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
24e70 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
24e80 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
24e90 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
24ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24eb0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
24ec0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
24ed0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
24ee0 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
24ef0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
24f00 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
24f10 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
24f20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
24f30 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
24f40 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
24f50 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
24f60 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
24f70 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
24f80 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
24f90 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
24fa0 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
24fb0 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fd0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
24fe0 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
24ff0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
25000 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
25010 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
25020 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
25030 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
25040 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
25050 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
25060 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
25070 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
25080 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
25090 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
250a0 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
250b0 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
250c0 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
250d0 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
250e0 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
250f0 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
25100 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
25110 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
25120 61 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73 69  anch)(void*,unsi
25130 67 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c 75 38  gned iSrcLine,u8
25140 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20   eThis,u8 eMx); 
25150 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a   /* Callback */.
25160 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61    void *pVdbeBra
25170 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  nchArg;         
25180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
251a0 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23  st argument */.#
251b0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
251c0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
251d0 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c    int (*xTestCal
251e0 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20  lback)(int);    
251f0 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62      /* Invoked b
25200 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  y sqlite3FaultSi
25210 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  m() */.#endif.  
25220 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61  int bLocaltimeFa
25230 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ult;            
25240 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69    /* True to fai
25250 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61  l localtime() ca
25260 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 62 49 6e  lls */.  int bIn
25270 74 65 72 6e 61 6c 46 75 6e 63 74 69 6f 6e 73 3b  ternalFunctions;
25280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
25290 74 65 72 6e 61 6c 20 53 51 4c 20 66 75 6e 63 74  ternal SQL funct
252a0 69 6f 6e 73 20 61 72 65 20 76 69 73 69 62 6c 65  ions are visible
252b0 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52   */.  int iOnceR
252c0 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20  esetThreshold;  
252d0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20          /* When 
252e0 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65  to reset OP_Once
252f0 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75   counters */.  u
25300 33 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b 20  32 szSorterRef; 
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25320 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e 20   /* Min size in 
25330 62 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f 72  bytes to use sor
25340 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b 0a 0a  ter-refs */.};..
25350 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f  /*.** This macro
25360 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
25370 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74  of assert() stat
25380 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61  ements to indica
25390 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61  te that.** the a
253a0 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61  ssert is only va
253b0 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f  lid on a well-fo
253c0 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 20  rmed database.  
253d0 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a  Instead of:.**.*
253e0 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
253f0 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69  );.**.** One wri
25400 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  tes:.**.**     a
25410 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52  ssert( X || CORR
25420 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20  UPT_DB );.**.** 
25430 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74 72  CORRUPT_DB is tr
25440 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c  ue during normal
25450 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52   operation.  COR
25460 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74  RUPT_DB does not
25470 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61   indicate.** tha
25480 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  t the database i
25490 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72  s definitely cor
254a0 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20  rupt, only that 
254b0 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72  it might be corr
254c0 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74  upt..** For most
254d0 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52   test cases, COR
254e0 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20 74  RUPT_DB is set t
254f0 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20  o false using a 
25500 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74  special.** sqlit
25510 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
25520 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73  ).  This enables
25530 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
25540 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a  ents to prove.**
25550 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72 65   things that are
25560 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72   always true for
25570 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
25580 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  abases..*/.#defi
25590 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28  ne CORRUPT_DB  (
255a0 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65  sqlite3Config.ne
255b0 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a  verCorrupt==0)..
255c0 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f  /*.** Context po
255d0 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77  inter passed dow
255e0 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72  n through the tr
255f0 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75  ee-walk..*/.stru
25600 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61  ct Walker {.  Pa
25610 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
25620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25630 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65          /* Parse
25640 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20  r context.  */. 
25650 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c   int (*xExprCall
25660 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45  back)(Walker*, E
25670 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61  xpr*);     /* Ca
25680 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65  llback for expre
25690 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
256a0 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
256b0 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  k)(Walker*,Selec
256c0 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*);  /* Callbac
256d0 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
256e0 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63  .  void (*xSelec
256f0 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b  tCallback2)(Walk
25700 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20  er*,Select*);/* 
25710 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20  Second callback 
25720 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
25730 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68   int walkerDepth
25740 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25750 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
25760 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69  mber of subqueri
25770 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65  es */.  u8 eCode
25780 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257a0 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f    /* A small pro
257b0 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a  cessing code */.
257c0 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
257d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
257f0 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
25800 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
25810 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
25820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25830 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e          /* Namin
25840 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20  g context */.   
25850 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25870 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
25880 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69  counter */.    i
25890 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20  nt iCur;        
258a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258b0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75           /* A cu
258c0 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
258d0 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63     SrcList *pSrc
258e0 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25900 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
25910 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75     struct SrcCou
25920 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20  nt *pSrcCount;  
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25940 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20  Counting column 
25950 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
25960 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69 6e    struct CCurHin
25970 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20  t *pCCurHint;   
25980 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
25990 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f  sed by codeCurso
259a0 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69  rHint() */.    i
259b0 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20  nt *aiCol;      
259c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259d0 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61           /* arra
259e0 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  y of column inde
259f0 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  xes */.    struc
25a00 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78  t IdxCover *pIdx
25a10 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20  Cover;          
25a20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
25a30 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65  r index coverage
25a40 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49   */.    struct I
25a50 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64  dxExprTrans *pId
25a60 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  xTrans;         
25a70 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64 78    /* Convert idx
25a80 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d  ed expr to colum
25a90 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  n */.    ExprLis
25aa0 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
25ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ac0 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20 63     /* GROUP BY c
25ad0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53 65 6c  lause */.    Sel
25ae0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
25af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b00 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e 47         /* HAVING
25b10 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65   to WHERE clause
25b20 20 63 74 78 20 2a 2f 0a 20 20 20 20 73 74 72 75   ctx */.    stru
25b30 63 74 20 57 69 6e 64 6f 77 52 65 77 72 69 74 65  ct WindowRewrite
25b40 20 2a 70 52 65 77 72 69 74 65 3b 20 20 20 20 20   *pRewrite;     
25b50 20 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f 77 20        /* Window 
25b60 72 65 77 72 69 74 65 20 63 6f 6e 74 65 78 74 20  rewrite context 
25b70 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57 68  */.    struct Wh
25b80 65 72 65 43 6f 6e 73 74 20 2a 70 43 6f 6e 73 74  ereConst *pConst
25b90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25ba0 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
25bb0 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20   constants */.  
25bc0 20 20 73 74 72 75 63 74 20 52 65 6e 61 6d 65 43    struct RenameC
25bd0 74 78 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20  tx *pRename;    
25be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
25bf0 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 63 6f 6e  ENAME COLUMN con
25c00 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  text */.  } u;.}
25c10 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65  ;../* Forward de
25c20 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e  clarations */.in
25c30 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
25c40 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  r(Walker*, Expr*
25c50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
25c60 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65  lkExprList(Walke
25c70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
25c80 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
25c90 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53  elect(Walker*, S
25ca0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
25cb0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78  ite3WalkSelectEx
25cc0 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  pr(Walker*, Sele
25cd0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
25ce0 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28  3WalkSelectFrom(
25cf0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
25d00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
25d10 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65  prWalkNoop(Walke
25d20 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
25d30 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
25d40 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53  kNoop(Walker*, S
25d50 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
25d60 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46 61  ite3SelectWalkFa
25d70 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  il(Walker*, Sele
25d80 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ct*);.#ifdef SQL
25d90 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73  ITE_DEBUG.void s
25da0 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b  qlite3SelectWalk
25db0 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c  Assert2(Walker*,
25dc0 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69   Select*);.#endi
25dd0 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
25de0 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61  code from the pa
25df0 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67  rse-tree walking
25e00 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20   primitives and 
25e10 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63  their.** callbac
25e20 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ks..*/.#define W
25e30 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30  RC_Continue    0
25e40 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64     /* Continue d
25e50 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65  own into childre
25e60 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  n */.#define WRC
25e70 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20  _Prune       1  
25e80 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65   /* Omit childre
25e90 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77  n but continue w
25ea0 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20  alking siblings 
25eb0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41  */.#define WRC_A
25ec0 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f  bort       2   /
25ed0 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72  * Abandon the tr
25ee0 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a  ee walk */../*.*
25ef0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
25f00 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
25f10 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74  represents a set
25f20 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   of one or more 
25f30 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20  CTEs.** (common 
25f40 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
25f50 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61 20  s) created by a 
25f60 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75  single WITH clau
25f70 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69  se..*/.struct Wi
25f80 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b  th {.  int nCte;
25f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fa0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
25fb0 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65 20   of CTEs in the 
25fc0 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20  WITH clause */. 
25fd0 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20   With *pOuter;  
25fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ff0 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57   /* Containing W
26000 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e  ITH clause, or N
26010 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ULL */.  struct 
26020 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20 20  Cte {           
26030 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
26040 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65 20  each CTE in the 
26050 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20  WITH clause.... 
26060 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
26070 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
26080 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
26090 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
260a0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c    ExprList *pCol
260b0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
260c0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70    /* List of exp
260d0 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d  licit column nam
260e0 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  es, or NULL */. 
260f0 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
26100 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ct;             
26110 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69     /* The defini
26120 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45  tion of this CTE
26130 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   */.    const ch
26140 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20  ar *zCteErr;    
26150 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
26160 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69 72   message for cir
26170 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73  cular references
26180 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b   */.  } a[1];.};
26190 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
261a0 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  DEBUG./*.** An i
261b0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54  nstance of the T
261c0 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69  reeView object i
261d0 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74  s used for print
261e0 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ing the content 
261f0 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63  of.** data struc
26200 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33  tures on sqlite3
26210 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75 73  DebugPrintf() us
26220 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20  ing a tree-like 
26230 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  view..*/.struct 
26240 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74  TreeView {.  int
26250 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
26260 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65       /* Which le
26270 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20  vel of the tree 
26280 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75  we are on */.  u
26290 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20  8  bLine[100];  
262a0 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76         /* Draw v
262b0 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d  ertical in colum
262c0 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20  n i if bLine[i] 
262d0 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65  is true */.};.#e
262e0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
262f0 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  EBUG */../*.** T
26300 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 75 73  his object is us
26310 65 64 20 69 6e 20 76 61 72 69 6f 69 75 73 20 77  ed in varioius w
26320 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61 74 65 64  ays, all related
26330 20 74 6f 20 77 69 6e 64 6f 77 20 66 75 6e 63 74   to window funct
26340 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 28 31 29  ions.**.**   (1)
26350 20 41 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e   A single instan
26360 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
26370 74 75 72 65 20 69 73 20 61 74 74 61 63 68 65 64  ture is attached
26380 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20 20   to the.**      
26390 20 74 68 65 20 45 78 70 72 2e 70 57 69 6e 20 66   the Expr.pWin f
263a0 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20 77 69  ield for each wi
263b0 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69 6e  ndow function in
263c0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74   an expression t
263d0 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54 68  ree..**       Th
263e0 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20  is object holds 
263f0 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  the information 
26400 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
26410 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a 2a   OVER clause,.**
26420 20 20 20 20 20 20 20 70 6c 75 73 20 61 64 64 69         plus addi
26430 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 73  tional fields us
26440 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65 20 67  ed during code g
26450 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  eneration..**.**
26460 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e 64 6f     (2) All windo
26470 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 61  w functions in a
26480 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 66   single SELECT f
26490 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73  orm a linked-lis
264a0 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74 61 63  t.**       attac
264b0 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57  hed to Select.pW
264c0 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f 77 2e  in.  The Window.
264d0 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f 77  pFunc and Window
264e0 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20 20 20  .pExpr.**       
264f0 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62 61 63  fields point bac
26500 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65 73 73  k to the express
26510 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
26520 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 2e  window function.
26530 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68 65  .**.**   (3) The
26540 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 57 49   terms of the WI
26550 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66 20 61  NDOW clause of a
26560 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e 73 74   SELECT are inst
26570 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a 2a 2a  ances of this.**
26580 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f 6e         object on
26590 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 61   a linked list a
265a0 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63  ttached to Selec
265b0 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a  t.pWinDefn..**.*
265c0 2a 20 54 68 65 20 75 73 65 73 20 28 31 29 20 61  * The uses (1) a
265d0 6e 64 20 28 32 29 20 61 72 65 20 72 65 61 6c 6c  nd (2) are reall
265e0 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64 6f  y the same Windo
265f0 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a 75  w object that ju
26600 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74 6f  st happens.** to
26610 20 62 65 20 61 63 63 65 73 73 69 62 6c 65 20 69   be accessible i
26620 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74 20  n two different 
26630 77 61 79 73 2e 20 20 55 73 65 20 28 33 29 20 69  ways.  Use (3) i
26640 73 20 61 72 65 20 73 65 70 61 72 61 74 65 20 6f  s are separate o
26650 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
26660 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68 61  t Window {.  cha
26670 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
26680 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
26690 77 69 6e 64 6f 77 20 28 6d 61 79 20 62 65 20 4e  window (may be N
266a0 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ULL) */.  ExprLi
266b0 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b 20  st *pPartition; 
266c0 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20 42    /* PARTITION B
266d0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
266e0 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
266f0 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  ;     /* ORDER B
26700 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38  Y clause */.  u8
26710 20 65 54 79 70 65 3b 20 20 20 20 20 20 20 20 20   eType;         
26720 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e 47        /* TK_RANG
26730 45 20 6f 72 20 54 4b 5f 52 4f 57 53 20 2a 2f 0a  E or TK_ROWS */.
26740 20 20 75 38 20 65 53 74 61 72 74 3b 20 20 20 20    u8 eStart;    
26750 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42            /* UNB
26760 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c  OUNDED, CURRENT,
26770 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f   PRECEDING or FO
26780 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20  LLOWING */.  u8 
26790 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  eEnd;           
267a0 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45       /* UNBOUNDE
267b0 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45 43  D, CURRENT, PREC
267c0 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49  EDING or FOLLOWI
267d0 4e 47 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 53  NG */.  Expr *pS
267e0 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
267f0 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66 6f  /* Expression fo
26800 72 20 22 3c 65 78 70 72 3e 20 50 52 45 43 45 44  r "<expr> PRECED
26810 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ING" */.  Expr *
26820 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
26830 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
26840 66 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c 4c  for "<expr> FOLL
26850 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e 64  OWING" */.  Wind
26860 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20 20  ow *pNextWin;   
26870 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e 64      /* Next wind
26880 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c 6f  ow function belo
26890 6e 67 69 6e 67 20 74 6f 20 74 68 69 73 20 53 45  nging to this SE
268a0 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  LECT */.  Expr *
268b0 70 46 69 6c 74 65 72 3b 20 20 20 20 20 20 20 20  pFilter;        
268c0 20 20 2f 2a 20 54 68 65 20 46 49 4c 54 45 52 20    /* The FILTER 
268d0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
268e0 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
268f0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66          /* The f
26900 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  unction */.  int
26910 20 69 45 70 68 43 73 72 3b 20 20 20 20 20 20 20   iEphCsr;       
26920 20 20 20 20 20 2f 2a 20 50 61 72 74 69 74 69 6f       /* Partitio
26930 6e 20 62 75 66 66 65 72 20 6f 72 20 50 65 65 72  n buffer or Peer
26940 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
26950 20 72 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e 74   regAccum;.  int
26960 20 72 65 67 52 65 73 75 6c 74 3b 0a 20 20 69 6e   regResult;.  in
26970 74 20 63 73 72 41 70 70 3b 20 20 20 20 20 20 20  t csrApp;       
26980 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f        /* Functio
26990 6e 20 63 75 72 73 6f 72 20 28 75 73 65 64 20 62  n cursor (used b
269a0 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20  y min/max) */.  
269b0 69 6e 74 20 72 65 67 41 70 70 3b 20 20 20 20 20  int regApp;     
269c0 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74          /* Funct
269d0 69 6f 6e 20 72 65 67 69 73 74 65 72 20 28 61 6c  ion register (al
269e0 73 6f 20 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d  so used by min/m
269f0 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ax) */.  int reg
26a00 50 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  Part;           
26a10 20 2f 2a 20 46 69 72 73 74 20 69 6e 20 61 20 73   /* First in a s
26a20 65 74 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  et of registers 
26a30 68 6f 6c 64 69 6e 67 20 50 41 52 54 49 54 49 4f  holding PARTITIO
26a40 4e 20 42 59 0a 20 20 20 20 20 20 20 20 20 20 20  N BY.           
26a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
26a60 2a 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 76  * and ORDER BY v
26a70 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 77 69  alues for the wi
26a80 6e 64 6f 77 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ndow */.  Expr *
26a90 70 4f 77 6e 65 72 3b 20 20 20 20 20 20 20 20 20  pOwner;         
26aa0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
26ab0 6f 62 6a 65 63 74 20 74 68 69 73 20 77 69 6e 64  object this wind
26ac0 6f 77 20 69 73 20 61 74 74 61 63 68 65 64 20 74  ow is attached t
26ad0 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66 66  o */.  int nBuff
26ae0 65 72 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f  erCol;         /
26af0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
26b00 6d 6e 73 20 69 6e 20 62 75 66 66 65 72 20 74 61  mns in buffer ta
26b10 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72  ble */.  int iAr
26b20 67 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  gCol;           
26b30 20 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20 66 69   /* Offset of fi
26b40 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f 72  rst argument for
26b50 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 2a   this function *
26b60 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  /.};..#ifndef SQ
26b70 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57  LITE_OMIT_WINDOW
26b80 46 55 4e 43 0a 76 6f 69 64 20 73 71 6c 69 74 65  FUNC.void sqlite
26b90 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 73 71  3WindowDelete(sq
26ba0 6c 69 74 65 33 2a 2c 20 57 69 6e 64 6f 77 2a 29  lite3*, Window*)
26bb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
26bc0 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74 65 28 73  ndowListDelete(s
26bd0 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64  qlite3 *db, Wind
26be0 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a  ow *p);.Window *
26bf0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c 6c  sqlite3WindowAll
26c00 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  oc(Parse*, int, 
26c10 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74 20  int, Expr*, int 
26c20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
26c30 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61  qlite3WindowAtta
26c40 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
26c50 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74 20  , Window*);.int 
26c60 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 6d  sqlite3WindowCom
26c70 70 61 72 65 28 50 61 72 73 65 2a 2c 20 57 69 6e  pare(Parse*, Win
26c80 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a  dow*, Window*);.
26c90 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
26ca0 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73 65  owCodeInit(Parse
26cb0 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69  *, Window*);.voi
26cc0 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43  d sqlite3WindowC
26cd0 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c 20  odeStep(Parse*, 
26ce0 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49 6e  Select*, WhereIn
26cf0 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  fo*, int, int);.
26d00 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  int sqlite3Windo
26d10 77 52 65 77 72 69 74 65 28 50 61 72 73 65 2a 2c  wRewrite(Parse*,
26d20 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
26d30 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62 71  qlite3ExpandSubq
26d40 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74 72  uery(Parse*, str
26d50 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
26d60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26d70 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61 72  WindowUpdate(Par
26d80 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69  se*, Window*, Wi
26d90 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29  ndow*, FuncDef*)
26da0 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
26db0 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69 74  3WindowDup(sqlit
26dc0 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f  e3 *db, Expr *pO
26dd0 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29  wner, Window *p)
26de0 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
26df0 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28 73  3WindowListDup(s
26e00 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64  qlite3 *db, Wind
26e10 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c  ow *p);.void sql
26e20 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
26e30 6f 6e 73 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  ons(void);.#else
26e40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26e50 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61 2c  3WindowDelete(a,
26e60 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  b).# define sqli
26e70 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f  te3WindowFunctio
26e80 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73 71  ns().# define sq
26e90 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63  lite3WindowAttac
26ea0 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66 0a  h(a,b,c).#endif.
26eb0 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
26ec0 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
26ed0 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
26ee0 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
26ef0 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
26f00 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
26f10 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
26f20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
26f30 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
26f40 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
26f50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
26f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f70 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
26f80 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
26f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
26fb0 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
26fc0 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
26fd0 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
26fe0 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
27020 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
27030 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
27040 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
27050 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
27060 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
27070 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
27080 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
27090 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
270a0 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
270b0 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
270c0 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
270d0 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
270e0 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
270f0 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
27100 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
27110 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
27120 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
27130 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
27140 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
27150 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
27160 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f 72  int sqlite3Repor
27170 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72 2c  tError(int iErr,
27180 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e   int lineno, con
27190 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29 3b  st char *zType);
271a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72  .int sqlite3Corr
271b0 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  uptError(int);.i
271c0 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  nt sqlite3Misuse
271d0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
271e0 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
271f0 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69  rror(int);.#defi
27200 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
27210 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f  T_BKPT sqlite3Co
27220 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
27230 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
27240 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20  ITE_MISUSE_BKPT 
27250 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
27260 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
27270 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  fine SQLITE_CANT
27280 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65  OPEN_BKPT sqlite
27290 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f  3CantopenError(_
272a0 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20  _LINE__).#ifdef 
272b0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
272c0 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  nt sqlite3NomemE
272d0 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74  rror(int);.  int
272e0 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d   sqlite3Ioerrnom
272f0 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20  emError(int);.  
27300 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
27310 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c  ptPgnoError(int,
27320 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20  Pgno);.# define 
27330 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
27340 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  T sqlite3NomemEr
27350 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20  ror(__LINE__).# 
27360 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
27370 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73  ERR_NOMEM_BKPT s
27380 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
27390 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
273a0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
273b0 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20  CORRUPT_PGNO(P) 
273c0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67  sqlite3CorruptPg
273d0 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  noError(__LINE__
273e0 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65  ,(P)).#else.# de
273f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  fine SQLITE_NOME
27400 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f  M_BKPT SQLITE_NO
27410 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MEM.# define SQL
27420 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f  ITE_IOERR_NOMEM_
27430 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52  BKPT SQLITE_IOER
27440 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65  R_NOMEM.# define
27450 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
27460 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43  PGNO(P) sqlite3C
27470 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
27480 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  NE__).#endif../*
27490 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53  .** FTS3 and FTS
274a0 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76  4 both require v
274b0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70  irtual table sup
274c0 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69  port.*/.#if defi
274d0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
274e0 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20  VIRTUALTABLE).# 
274f0 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
27500 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66  BLE_FTS3.# undef
27510 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
27520 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  TS4.#endif../*.*
27530 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
27540 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
27550 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
27560 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
27570 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
27580 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
27590 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
275a0 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61  usion we also ca
275b0 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
275c0 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
275d0 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
275e0 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49  n alias for SQLI
275f0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
27600 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
27610 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27620 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
27630 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27640 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
27650 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31  TE_ENABLE_FTS3 1
27660 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
27670 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65  he ctype.h heade
27680 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20  r is needed for 
27690 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d  non-ASCII system
276a0 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a  s.  It is also.*
276b0 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33  * needed by FTS3
276c0 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e   when FTS3 is in
276d0 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d  cluded in the am
276e0 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23  algamation..*/.#
276f0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
27700 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20  TE_ASCII) || \. 
27710 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
27720 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20  TE_ENABLE_FTS3) 
27730 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
27740 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29  E_AMALGAMATION))
27750 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  .# include <ctyp
27760 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e.h>.#endif../*.
27770 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
27780 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68   macros mimic th
27790 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
277a0 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75  ry functions tou
277b0 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61  pper(),.** isspa
277c0 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c  ce(), isalnum(),
277d0 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69   isdigit() and i
277e0 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65  sxdigit(), respe
277f0 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20  ctively. The.** 
27800 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  sqlite versions 
27810 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53  only work for AS
27820 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20  CII characters, 
27830 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
27840 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  cale..*/.#ifdef 
27850 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64  SQLITE_ASCII.# d
27860 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
27870 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28  pper(x)  ((x)&~(
27880 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
27890 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
278a0 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66  x)]&0x20)).# def
278b0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
278c0 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ce(x)   (sqlite3
278d0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
278e0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
278f0 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  1).# define sqli
27900 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
27910 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
27920 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
27930 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66  (x)]&0x06).# def
27940 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
27950 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ha(x)   (sqlite3
27960 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
27970 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
27980 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  2).# define sqli
27990 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
279a0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
279b0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
279c0 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66  (x)]&0x04).# def
279d0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
279e0 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33  git(x)  (sqlite3
279f0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
27a00 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
27a10 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  8).# define sqli
27a20 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
27a30 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c  (sqlite3UpperToL
27a40 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63  ower[(unsigned c
27a50 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69  har)(x)]).# defi
27a60 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74  ne sqlite3Isquot
27a70 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
27a80 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
27a90 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38 30  d char)(x)]&0x80
27aa0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
27ab0 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
27ac0 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e  x)   toupper((un
27ad0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
27ae0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27af0 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73  3Isspace(x)   is
27b00 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20  space((unsigned 
27b10 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
27b20 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
27b30 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28  m(x)   isalnum((
27b40 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27b50 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
27b60 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
27b70 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65  isalpha((unsigne
27b80 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
27b90 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
27ba0 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74  git(x)   isdigit
27bb0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
27bc0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
27bd0 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
27be0 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69    isxdigit((unsi
27bf0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
27c00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
27c10 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f  olower(x)   tolo
27c20 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  wer((unsigned ch
27c30 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
27c40 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28   sqlite3Isquote(
27c50 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c  x)   ((x)=='"'||
27c60 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d  (x)=='\''||(x)==
27c70 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23  '['||(x)=='`').#
27c80 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
27c90 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a  3IsIdChar(u8);..
27ca0 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
27cb0 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
27cc0 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  es.*/.int sqlite
27cd0 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63  3StrICmp(const c
27ce0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
27cf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
27d00 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
27d10 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
27d20 69 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28 43  ite3Strlen30NN(C
27d30 29 20 28 73 74 72 6c 65 6e 28 43 29 26 30 78 33  ) (strlen(C)&0x3
27d40 66 66 66 66 66 66 66 29 0a 63 68 61 72 20 2a 73  fffffff).char *s
27d50 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65  qlite3ColumnType
27d60 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b  (Column*,char*);
27d70 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
27d80 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33  StrNICmp sqlite3
27d90 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73  _strnicmp..int s
27da0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74  qlite3MallocInit
27db0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
27dc0 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f  ite3MallocEnd(vo
27dd0 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  id);.void *sqlit
27de0 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76  e3Malloc(u64);.v
27df0 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
27e00 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69  ocZero(u64);.voi
27e10 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
27e20 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c  ocZero(sqlite3*,
27e30 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
27e40 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
27e50 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
27e60 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
27e70 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74  allocRawNN(sqlit
27e80 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  e3*, u64);.char 
27e90 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
27ea0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
27eb0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
27ec0 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
27ed0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
27ee0 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  ar*, u64);.char 
27ef0 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75  *sqlite3DbSpanDu
27f00 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
27f10 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
27f20 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r*);.void *sqlit
27f30 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
27f40 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
27f50 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
27f60 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
27f70 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
27f80 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
27f90 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
27fa0 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
27fb0 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
27fc0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
27fd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
27fe0 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  FreeNN(sqlite3*,
27ff0 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
28000 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
28010 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
28020 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
28030 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
28040 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
28050 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
28060 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
28070 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
28080 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
28090 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66  fault(void);.#if
280a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
280b0 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
280c0 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
280d0 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
280e0 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
280f0 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  id));.#endif.int
28100 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
28110 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
28120 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
28130 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
28140 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
28150 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
28160 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
28170 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
28180 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
28190 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
281a0 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
281b0 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
281c0 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
281d0 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
281e0 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
281f0 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
28200 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
28210 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
28220 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
28230 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
28240 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
28250 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
28260 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
28270 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
28280 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
28290 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
282a0 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
282b0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
282c0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
282d0 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
282e0 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
282f0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
28300 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64  e(D,P).#else.# d
28310 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
28320 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
28330 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
28340 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
28350 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
28360 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
28370 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
28380 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
28390 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
283a0 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
283b0 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
283c0 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f  #endif../* Do no
283d0 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d  t allow both MEM
283e0 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33  SYS5 and MEMSYS3
283f0 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74   to be defined t
28400 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65  ogether.  If the
28410 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c  y.** are, disabl
28420 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66  e MEMSYS3.*/.#if
28430 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
28440 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20  E_MEMSYS5.const 
28450 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
28460 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
28470 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b  etMemsys5(void);
28480 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  .#undef SQLITE_E
28490 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65  NABLE_MEMSYS3.#e
284a0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
284b0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
284c0 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
284d0 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
284e0 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
284f0 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
28500 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
28510 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71  _MUTEX_OMIT.  sq
28520 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
28530 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
28540 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76  e3DefaultMutex(v
28550 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
28560 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
28570 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70  nst *sqlite3Noop
28580 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
28590 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
285a0 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
285b0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
285c0 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69  te3MutexInit(voi
285d0 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  d);.  int sqlite
285e0 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b  3MutexEnd(void);
285f0 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
28600 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
28610 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69  X_OMIT) && !defi
28620 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
28630 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71  _NOOP).  void sq
28640 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
28650 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  er(void);.#else.
28660 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28670 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a  MemoryBarrier().
28680 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f  #endif..sqlite3_
28690 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61  int64 sqlite3Sta
286a0 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76  tusValue(int);.v
286b0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
286c0 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  sUp(int, int);.v
286d0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
286e0 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b  sDown(int, int);
286f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
28700 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74  tusHighwater(int
28710 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
28720 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64  te3LookasideUsed
28730 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b  (sqlite3*,int*);
28740 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d  ../* Access to m
28750 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73  utexes used by s
28760 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20  qlite3_status() 
28770 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  */.sqlite3_mutex
28780 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31   *sqlite3Pcache1
28790 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c  Mutex(void);.sql
287a0 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
287b0 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76  te3MallocMutex(v
287c0 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e  oid);..#if defin
287d0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
287e0 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43  _MULTITHREADED_C
287f0 48 45 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e  HECKS) && !defin
28800 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
28810 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74  OMIT).void sqlit
28820 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e  e3MutexWarnOnCon
28830 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f  tention(sqlite3_
28840 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23  mutex*);.#else.#
28850 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
28860 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e  utexWarnOnConten
28870 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a  tion(x).#endif..
28880 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
28890 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
288a0 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
288b0 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
288c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
288d0 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
288e0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
288f0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
28900 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
28910 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
28920 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
28930 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
28940 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
28950 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
28960 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
28970 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
28980 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
28990 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
289a0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
289b0 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
289c0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
289d0 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
289e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
289f0 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
28a00 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
28a10 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
28a20 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
28a30 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
28a40 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72  lues */.};..char
28a50 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66   *sqlite3MPrintf
28a60 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
28a70 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
28a80 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e  r *sqlite3VMPrin
28a90 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
28aa0 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
28ab0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
28ac0 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
28ad0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
28ae0 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20  AVE_OS_TRACE).  
28af0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
28b00 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
28b10 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
28b20 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
28b30 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
28b40 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
28b50 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
28b60 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
28b70 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
28b80 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73  _DEBUG).  void s
28b90 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
28ba0 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  pr(TreeView*, co
28bb0 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  nst Expr*, u8);.
28bc0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
28bd0 65 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69  eeViewBareExprLi
28be0 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
28bf0 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  nst ExprList*, c
28c00 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
28c10 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
28c20 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65  iewExprList(Tree
28c30 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
28c40 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73  rList*, u8, cons
28c50 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
28c60 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
28c70 53 72 63 4c 69 73 74 28 54 72 65 65 56 69 65 77  SrcList(TreeView
28c80 2a 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69 73 74  *, const SrcList
28c90 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
28ca0 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74  e3TreeViewSelect
28cb0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
28cc0 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a  t Select*, u8);.
28cd0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
28ce0 65 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56  eeViewWith(TreeV
28cf0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68  iew*, const With
28d00 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  *, u8);.#ifndef 
28d10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
28d20 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64 20 73 71  OWFUNC.  void sq
28d30 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 6e  lite3TreeViewWin
28d40 64 6f 77 28 54 72 65 65 56 69 65 77 2a 2c 20 63  dow(TreeView*, c
28d50 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38  onst Window*, u8
28d60 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28d70 33 54 72 65 65 56 69 65 77 57 69 6e 46 75 6e 63  3TreeViewWinFunc
28d80 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
28d90 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a  t Window*, u8);.
28da0 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a  #endif.#endif...
28db0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
28dc0 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
28dd0 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
28de0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
28df0 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
28e00 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
28e10 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
28e20 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
28e30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
28e40 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c  okenInit(Token*,
28e50 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
28e60 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
28e70 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
28e80 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
28e90 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
28ea0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
28eb0 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
28ec0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
28ed0 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
28ee0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
28ef0 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
28f00 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
28f10 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
28f20 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
28f30 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
28f40 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
28f50 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
28f60 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
28f70 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
28f80 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
28f90 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
28fa0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
28fb0 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
28fc0 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28  3NoTempsInRange(
28fd0 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
28fe0 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71  .#endif.Expr *sq
28ff0 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
29000 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
29010 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
29020 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
29030 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
29040 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
29050 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
29060 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
29070 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
29080 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
29090 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
290a0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
290b0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
290c0 74 65 33 50 45 78 70 72 41 64 64 53 65 6c 65 63  te3PExprAddSelec
290d0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
290e0 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20   Select*);.Expr 
290f0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28  *sqlite3ExprAnd(
29100 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20  sqlite3*,Expr*, 
29110 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
29120 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f  lite3ExprFunctio
29130 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
29140 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  t*, Token*, int)
29150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29160 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
29170 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
29180 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
29190 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
291a0 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
291b0 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
291c0 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
291d0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
291e0 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73  ,Expr*);.ExprLis
291f0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
29200 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50  stAppendVector(P
29210 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
29220 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  IdList*,Expr*);.
29230 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29240 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72  ListSetSortOrder
29250 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  (ExprList*,int);
29260 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
29270 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
29280 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
29290 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
292a0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
292b0 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
292c0 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  prList*,const ch
292d0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
292e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
292f0 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  prListDelete(sql
29300 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ite3*, ExprList*
29310 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78  );.u32 sqlite3Ex
29320 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73  prListFlags(cons
29330 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  t ExprList*);.in
29340 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71  t sqlite3Init(sq
29350 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b  lite3*, char**);
29360 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
29370 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20  Callback(void*, 
29380 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61  int, char**, cha
29390 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r**);.int sqlite
293a0 33 49 6e 69 74 4f 6e 65 28 73 71 6c 69 74 65 33  3InitOne(sqlite3
293b0 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
293c0 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
293d0 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c  e3Pragma(Parse*,
293e0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
293f0 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64  ken*,int);.#ifnd
29400 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
29410 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75  IRTUALTABLE.Modu
29420 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67 6d  le *sqlite3Pragm
29430 61 56 74 61 62 52 65 67 69 73 74 65 72 28 73 71  aVtabRegister(sq
29440 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
29450 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69  r *zName);.#endi
29460 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  f.void sqlite3Re
29470 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
29480 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
29490 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
294a0 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
294b0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
294c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
294d0 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
294e0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
294f0 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
29500 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
29510 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
29520 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d  lite3DeleteColum
29530 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c  nNames(sqlite3*,
29540 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
29550 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45  ite3ColumnsFromE
29560 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45  xprList(Parse*,E
29570 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f  xprList*,i16*,Co
29580 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lumn**);.void sq
29590 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f  lite3SelectAddCo
295a0 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61  lumnTypeAndColla
295b0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
295c0 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  e*,Select*);.Tab
295d0 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
295e0 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
295f0 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  se*,Select*);.vo
29600 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
29610 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
29620 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a  *, int);.Index *
29630 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
29640 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a  yIndex(Table*);.
29650 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  i16 sqlite3Colum
29660 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c  nOfIndex(Index*,
29670 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69   i16);.void sqli
29680 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
29690 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
296a0 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
296b0 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  nt);.#if SQLITE_
296c0 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
296d0 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c  LUMNS.  void sql
296e0 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
296f0 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62  tiesFromName(Tab
29700 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23  le*, Column*);.#
29710 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
29720 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65  lite3ColumnPrope
29730 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c  rtiesFromName(T,
29740 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  C) /* no-op */.#
29750 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
29760 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  e3AddColumn(Pars
29770 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
29780 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
29790 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a  ddNotNull(Parse*
297a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
297b0 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65  ite3AddPrimaryKe
297c0 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
297d0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  st*, int, int, i
297e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
297f0 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61  3AddCheckConstra
29800 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  int(Parse*, Expr
29810 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29820 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28  AddDefaultValue(
29830 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
29840 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
29850 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
29860 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70  te3AddCollateTyp
29870 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
29880 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29890 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ndTable(Parse*,T
298a0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c  oken*,Token*,u8,
298b0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
298c0 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f  lite3ParseUri(co
298d0 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
298e0 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69  char*,unsigned i
298f0 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  nt*,.           
29900 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
29910 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68  _vfs**,char**,ch
29920 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73  ar **);.Btree *s
29930 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74  qlite3DbNameToBt
29940 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ree(sqlite3*,con
29950 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64  st char*);..#ifd
29960 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
29970 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71  ABLE.# define sq
29980 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29  lite3FaultSim(X)
29990 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65   SQLITE_OK.#else
299a0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61  .  int sqlite3Fa
299b0 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e  ultSim(int);.#en
299c0 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  dif..Bitvec *sql
299d0 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
299e0 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
299f0 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
29a00 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
29a10 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
29a20 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a  tNotNull(Bitvec*
29a30 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
29a40 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
29a50 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
29a60 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
29a70 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
29a80 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
29a90 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
29aa0 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
29ab0 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
29ac0 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69  ize(Bitvec*);.#i
29ad0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
29ae0 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69  ESTABLE.int sqli
29af0 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
29b00 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
29b10 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a  #endif..RowSet *
29b20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69  sqlite3RowSetIni
29b30 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  t(sqlite3*);.voi
29b40 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 44  d sqlite3RowSetD
29b50 65 6c 65 74 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  elete(void*);.vo
29b60 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
29b70 43 6c 65 61 72 28 76 6f 69 64 2a 29 3b 0a 76 6f  Clear(void*);.vo
29b80 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
29b90 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20  Insert(RowSet*, 
29ba0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
29bb0 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53  3RowSetTest(RowS
29bc0 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c  et*, int iBatch,
29bd0 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
29be0 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77  e3RowSetNext(Row
29bf0 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f  Set*, i64*);..vo
29c00 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
29c10 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65  View(Parse*,Toke
29c20 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
29c30 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63  ,ExprList*,Selec
29c40 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69  t*,int,int);..#i
29c50 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
29c60 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20  E_OMIT_VIEW) || 
29c70 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
29c80 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
29c90 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  E).  int sqlite3
29ca0 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
29cb0 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  es(Parse*,Table*
29cc0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29cd0 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  e sqlite3ViewGet
29ce0 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29  ColumnNames(A,B)
29cf0 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53   0.#endif..#if S
29d00 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
29d10 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69  ED>30.  int sqli
29d20 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
29d30 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69  (yDbMask);.#endi
29d40 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  f.void sqlite3Dr
29d50 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
29d60 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
29d70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29d80 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50  3CodeDropTable(P
29d90 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
29da0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
29db0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c  qlite3DeleteTabl
29dc0 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
29dd0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
29de0 33 46 72 65 65 49 6e 64 65 78 28 73 71 6c 69 74  3FreeIndex(sqlit
29df0 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69  e3*, Index*);.#i
29e00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29e10 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
29e20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
29e30 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
29e40 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
29e50 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
29e60 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
29e70 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
29e80 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
29e90 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
29ea0 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
29eb0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
29ec0 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
29ed0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
29ee0 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
29ef0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65  , SrcList*, Sele
29f00 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
29f10 74 2c 20 55 70 73 65 72 74 2a 29 3b 0a 76 6f 69  t, Upsert*);.voi
29f20 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41  d *sqlite3ArrayA
29f30 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a  llocate(sqlite3*
29f40 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c  ,void*,int,int*,
29f50 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73  int*);.IdList *s
29f60 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65  qlite3IdListAppe
29f70 6e 64 28 50 61 72 73 65 2a 2c 20 49 64 4c 69 73  nd(Parse*, IdLis
29f80 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
29f90 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
29fa0 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
29fb0 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
29fc0 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
29fd0 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
29fe0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
29ff0 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
2a000 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
2a010 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
2a020 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
2a030 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
2a040 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2a050 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
2a060 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2a070 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2a080 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0a0 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
2a0b0 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
2a0c0 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
2a0d0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
2a0e0 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
2a0f0 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
2a100 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
2a110 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67  e3SrcListFuncArg
2a120 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
2a130 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
2a140 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
2a150 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65  edByLookup(Parse
2a160 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69   *, struct SrcLi
2a170 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64  st_item *);.void
2a180 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
2a190 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63  hiftJoinType(Src
2a1a0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
2a1b0 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67  ite3SrcListAssig
2a1c0 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c  nCursors(Parse*,
2a1d0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64   SrcList*);.void
2a1e0 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65   sqlite3IdListDe
2a1f0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49  lete(sqlite3*, I
2a200 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
2a210 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
2a220 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  te(sqlite3*, Src
2a230 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  List*);.Index *s
2a240 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e  qlite3AllocateIn
2a250 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65  dexObject(sqlite
2a260 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a  3*,i16,int,char*
2a270 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a280 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
2a290 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
2a2a0 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
2a2b0 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
2a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2d0 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
2a2e0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
2a2f0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
2a300 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72  Index(Parse*, Sr
2a310 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  cList*, int);.in
2a320 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28  t sqlite3Select(
2a330 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2a340 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53   SelectDest*);.S
2a350 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
2a360 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45  lectNew(Parse*,E
2a370 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  xprList*,SrcList
2a380 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
2a390 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2a3a0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
2a3b0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c  *,ExprList*,u32,
2a3c0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2a3d0 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65  ite3SelectDelete
2a3e0 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63  (sqlite3*, Selec
2a3f0 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
2a400 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
2a410 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2a420 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2a430 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
2a440 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2a450 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
2a460 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
2a470 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
2a480 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23   Table*, int);.#
2a490 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2a4a0 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
2a4b0 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26  DELETE_LIMIT) &&
2a4c0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2a4d0 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a  _OMIT_SUBQUERY).
2a4e0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d  Expr *sqlite3Lim
2a4f0 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53  itWhere(Parse*,S
2a500 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
2a510 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63 68  prList*,Expr*,ch
2a520 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
2a530 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
2a540 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
2a550 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  ist*, Expr*, Exp
2a560 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  rList*, Expr*);.
2a570 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
2a580 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
2a590 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45  st*, ExprList*,E
2a5a0 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69 73  xpr*,int,ExprLis
2a5b0 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20 20  t*,Expr*,.      
2a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 55 70 73               Ups
2a5d0 65 72 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66 6f  ert*);.WhereInfo
2a5e0 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65   *sqlite3WhereBe
2a5f0 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  gin(Parse*,SrcLi
2a600 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
2a610 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31  st*,ExprList*,u1
2a620 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  6,int);.void sql
2a630 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65  ite3WhereEnd(Whe
2a640 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74  reInfo*);.LogEst
2a650 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74   sqlite3WhereOut
2a660 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72  putRowCount(Wher
2a670 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2a680 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
2a690 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  nct(WhereInfo*);
2a6a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2a6b0 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72 65  eIsOrdered(Where
2a6c0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
2a6d0 74 65 33 57 68 65 72 65 4f 72 64 65 72 42 79 4c  te3WhereOrderByL
2a6e0 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28 57 68 65  imitOptLabel(Whe
2a6f0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2a700 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
2a710 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
2a720 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
2a730 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
2a740 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2a750 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
2a760 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
2a770 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2a780 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
2a790 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
2a7a0 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
2a7b0 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20 20  OFF      0      
2a7c0 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50    /* Use of ONEP
2a7d0 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  ASS not allowed 
2a7e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
2a7f0 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20  SS_SINGLE   1   
2a800 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
2a810 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67  valid for a sing
2a820 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f  le row update */
2a830 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
2a840 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20 20  _MULTI    2     
2a850 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73     /* ONEPASS is
2a860 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69   valid for multi
2a870 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64  ple rows */.void
2a880 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2a890 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28  LoadIndexColumn(
2a8a0 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
2a8b0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2a8c0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2a8d0 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
2a8e0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2a8f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
2a900 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a910 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
2a920 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
2a930 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2a940 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2a950 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
2a960 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
2a970 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a980 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65  e3ExprCode(Parse
2a990 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2a9a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a9b0 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c  CodeCopy(Parse*,
2a9c0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
2a9d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2a9e0 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72  deFactorable(Par
2a9f0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2aa00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2aa10 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73  rCodeAtInit(Pars
2aa20 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2aa30 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2aa40 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c  CodeTemp(Parse*,
2aa50 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69   Expr*, int*);.i
2aa60 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2aa70 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c  deTarget(Parse*,
2aa80 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
2aa90 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2aaa0 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65  deAndCache(Parse
2aab0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2aac0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2aad0 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73  odeExprList(Pars
2aae0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
2aaf0 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64  nt, int, u8);.#d
2ab00 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
2ab10 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20  L_DUP      0x01 
2ab20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68   /* Deep, not sh
2ab30 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a  allow copies */.
2ab40 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2ab50 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30  CEL_FACTOR   0x0
2ab60 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74  2  /* Factor out
2ab70 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20   constant terms 
2ab80 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2ab90 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20  E_ECEL_REF      
2aba0 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70  0x04  /* Use Exp
2abb0 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72  rList.u.x.iOrder
2abc0 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65  ByCol */.#define
2abd0 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49   SQLITE_ECEL_OMI
2abe0 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a 20 4f  TREF  0x08  /* O
2abf0 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73 74 2e  mit if ExprList.
2ac00 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20  u.x.iOrderByCol 
2ac10 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
2ac20 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a  xprIfTrue(Parse*
2ac30 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
2ac40 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2ac50 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73  ExprIfFalse(Pars
2ac60 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2ac70 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2ac80 65 33 45 78 70 72 49 66 46 61 6c 73 65 44 75 70  e3ExprIfFalseDup
2ac90 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2aca0 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
2acb0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
2acc0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
2acd0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2ace0 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c  har*);.#define L
2acf0 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20 30 78  OCATE_VIEW    0x
2ad00 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54  01.#define LOCAT
2ad10 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32 0a 54  E_NOERR   0x02.T
2ad20 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
2ad30 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ateTable(Parse*,
2ad40 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20  u32 flags,const 
2ad50 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2ad60 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
2ad70 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
2ad80 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c  em(Parse*,u32 fl
2ad90 61 67 73 2c 73 74 72 75 63 74 20 53 72 63 4c 69  ags,struct SrcLi
2ada0 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65  st_item *);.Inde
2adb0 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  x *sqlite3FindIn
2adc0 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  dex(sqlite3*,con
2add0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2ade0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2adf0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2ae00 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
2ae10 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
2ae20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ae30 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
2ae40 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e  ndex(sqlite3*,in
2ae50 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
2ae60 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75  void sqlite3Vacu
2ae70 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  um(Parse*,Token*
2ae80 2c 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,Expr*);.int sql
2ae90 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
2aea0 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  ar**, sqlite3*, 
2aeb0 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
2aec0 75 65 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ue*);.char *sqli
2aed0 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
2aee0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
2aef0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2af00 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73 65  xprCompare(Parse
2af10 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  *,Expr*, Expr*, 
2af20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2af30 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69 70  3ExprCompareSkip
2af40 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
2af50 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2af60 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28  ExprListCompare(
2af70 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
2af80 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
2af90 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69  sqlite3ExprImpli
2afa0 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45 78  esExpr(Parse*,Ex
2afb0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
2afc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2afd0 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52  rImpliesNonNullR
2afe0 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76  ow(Expr*,int);.v
2aff0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
2b000 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73  nalyzeAggregates
2b010 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2b020 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2b030 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
2b040 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78  gList(NameContex
2b050 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  t*,ExprList*);.i
2b060 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2b070 76 65 72 65 64 42 79 49 6e 64 65 78 28 45 78 70  veredByIndex(Exp
2b080 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49 6e  r*, int iCur, In
2b090 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20  dex *pIdx);.int 
2b0a0 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55  sqlite3FunctionU
2b0b0 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a  sesThisSrc(Expr*
2b0c0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62  , SrcList*);.Vdb
2b0d0 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
2b0e0 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64  e(Parse*);.#ifnd
2b0f0 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
2b100 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  ABLE.void sqlite
2b110 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
2b120 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2b130 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
2b140 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  te(void);.#endif
2b150 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
2b160 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
2b170 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2b180 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
2b190 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
2b1a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2b1b0 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
2b1c0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
2b1d0 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
2b1e0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2b1f0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
2b200 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
2b210 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61 63  qlite3EndTransac
2b220 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29  tion(Parse*,int)
2b230 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61  ;.void sqlite3Sa
2b240 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20  vepoint(Parse*, 
2b250 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  int, Token*);.vo
2b260 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53  id sqlite3CloseS
2b270 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65  avepoints(sqlite
2b280 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  3 *);.void sqlit
2b290 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
2b2a0 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74  loseZombie(sqlit
2b2b0 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
2b2c0 33 45 78 70 72 49 64 54 6f 54 72 75 65 46 61 6c  3ExprIdToTrueFal
2b2d0 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  se(Expr*);.int s
2b2e0 71 6c 69 74 65 33 45 78 70 72 54 72 75 74 68 56  qlite3ExprTruthV
2b2f0 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  alue(const Expr*
2b300 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b310 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
2b320 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2b330 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
2b340 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
2b350 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2b360 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
2b370 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
2b380 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2b390 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42 79  onstantOrGroupBy
2b3a0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2b3b0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2b3c0 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62  sqlite3ExprIsTab
2b3d0 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  leConstant(Expr*
2b3e0 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  ,int);.#ifdef SQ
2b3f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
2b400 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c  OR_HINTS.int sql
2b410 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73  ite3ExprContains
2b420 53 75 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b  Subquery(Expr*);
2b430 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2b440 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72  te3ExprIsInteger
2b450 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69  (Expr*, int*);.i
2b460 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  nt sqlite3ExprCa
2b470 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78  nBeNull(const Ex
2b480 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2b490 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69  3ExprNeedsNoAffi
2b4a0 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74  nityChange(const
2b4b0 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69   Expr*, char);.i
2b4c0 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  nt sqlite3IsRowi
2b4d0 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
2b4e0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
2b4f0 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20  rateRowDelete(. 
2b500 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a     Parse*,Table*
2b510 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e  ,Trigger*,int,in
2b520 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c  t,int,i16,u8,u8,
2b530 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  u8,int);.void sq
2b540 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
2b550 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73  IndexDelete(Pars
2b560 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2b570 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2b580 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
2b590 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
2b5a0 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
2b5b0 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  t, int, int, int
2b5c0 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76  *,Index*,int);.v
2b5d0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2b5e0 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50  vePartIdxLabel(P
2b5f0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
2b600 73 71 6c 69 74 65 33 45 78 70 72 52 65 66 65 72  sqlite3ExprRefer
2b610 65 6e 63 65 73 55 70 64 61 74 65 64 43 6f 6c 75  encesUpdatedColu
2b620 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e  mn(Expr*,int*,in
2b630 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b640 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
2b650 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
2b660 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c  Table*,int*,int,
2b670 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  int,int,int,.   
2b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6a0 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a    u8,u8,int,int*
2b6b0 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ,int*,Upsert*);.
2b6c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2b6d0 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20  ABLE_NULL_TRIM. 
2b6e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74   void sqlite3Set
2b6f0 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62  MakeRecordP5(Vdb
2b700 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
2b710 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2b720 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50  e3SetMakeRecordP
2b730 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  5(A,B).#endif.vo
2b740 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
2b750 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
2b760 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
2b770 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69  t,int,int*,int,i
2b780 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  nt,int);.int sql
2b790 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
2b7a0 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
2b7b0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c  Table*, int, u8,
2b7c0 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c   int, u8*, int*,
2b7d0 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   int*);.void sql
2b7e0 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
2b7f0 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
2b800 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2b810 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74  sqlite3MultiWrit
2b820 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
2b830 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28  sqlite3MayAbort(
2b840 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2b850 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61  lite3HaltConstra
2b860 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2b870 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c   int, char*, i8,
2b880 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2b890 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69  e3UniqueConstrai
2b8a0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
2b8b0 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2b8c0 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72  lite3RowidConstr
2b8d0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
2b8e0 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20  , Table*);.Expr 
2b8f0 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28  *sqlite3ExprDup(
2b900 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
2b910 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  nt);.ExprList *s
2b920 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75  qlite3ExprListDu
2b930 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  p(sqlite3*,ExprL
2b940 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69  ist*,int);.SrcLi
2b950 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2b960 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  stDup(sqlite3*,S
2b970 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64  rcList*,int);.Id
2b980 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
2b990 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
2b9a0 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74  IdList*);.Select
2b9b0 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44   *sqlite3SelectD
2b9c0 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  up(sqlite3*,Sele
2b9d0 63 74 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65  ct*,int);.FuncDe
2b9e0 66 20 2a 73 71 6c 69 74 65 33 46 75 6e 63 74 69  f *sqlite3Functi
2b9f0 6f 6e 53 65 61 72 63 68 28 69 6e 74 2c 63 6f 6e  onSearch(int,con
2ba00 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2ba10 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69  sqlite3InsertBui
2ba20 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65  ltinFuncs(FuncDe
2ba30 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66  f*,int);.FuncDef
2ba40 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e   *sqlite3FindFun
2ba50 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63  ction(sqlite3*,c
2ba60 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75  onst char*,int,u
2ba70 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
2ba80 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
2ba90 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  inFunctions(void
2baa0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2bab0 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
2bac0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2bad0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
2bae0 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f  sterPerConnectio
2baf0 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  nBuiltinFunction
2bb00 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
2bb10 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
2bb20 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  eckOk(sqlite3*);
2bb30 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
2bb40 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
2bb50 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2bb60 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f  sqlite3ChangeCoo
2bb70 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  kie(Parse*, int)
2bb80 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
2bb90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
2bba0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2bbb0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2bbc0 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  R).void sqlite3M
2bbd0 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50  aterializeView(P
2bbe0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
2bbf0 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  xpr*, ExprList*,
2bc00 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  Expr*,int);.#end
2bc10 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2bc20 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
2bc30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
2bc40 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
2bc50 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
2bc60 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
2bc70 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc90 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c        Expr*,int,
2bca0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2bcb0 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
2bcc0 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
2bcd0 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
2bce0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2bcf0 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73  DropTrigger(Pars
2bd00 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
2bd10 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2bd20 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
2bd30 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
2bd40 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  *);.  Trigger *s
2bd50 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
2bd60 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
2bd70 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  le*, int, ExprLi
2bd80 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29  st*, int *pMask)
2bd90 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
2bda0 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
2bdb0 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a  Parse *, Table *
2bdc0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2bdd0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
2bde0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20  Parse*, Trigger 
2bdf0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
2be00 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
2be10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2be20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2be30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
2be40 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
2be50 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
2be60 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72  Parse *, Trigger
2be70 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
2be80 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
2be90 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72  oid sqliteViewTr
2bea0 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54  iggers(Parse*, T
2beb0 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
2bec0 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
2bed0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
2bee0 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73  eteTriggerStep(s
2bef0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
2bf00 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
2bf10 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
2bf20 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
2bf30 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
2bf40 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf60 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2bf70 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2bf80 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2bf90 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2bfa0 72 49 6e 73 65 72 74 53 74 65 70 28 50 61 72 73  rInsertStep(Pars
2bfb0 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  e*,Token*, IdLis
2bfc0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfe0 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65              Sele
2bff0 63 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a  ct*,u8,Upsert*,.
2c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c020 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2c030 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2c040 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2c050 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
2c060 70 64 61 74 65 53 74 65 70 28 50 61 72 73 65 2a  pdateStep(Parse*
2c070 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2c080 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20  *, Expr*, u8,.  
2c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0b0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2c0c0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2c0d0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
2c0e0 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c  qlite3TriggerDel
2c0f0 65 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54  eteStep(Parse*,T
2c100 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20  oken*, Expr*,.  
2c110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c130 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2c140 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2c150 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
2c160 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
2c170 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
2c180 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
2c190 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
2c1a0 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
2c1b0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2c1c0 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
2c1d0 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
2c1e0 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
2c1f0 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
2c200 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
2c210 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
2c220 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
2c230 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
2c240 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
2c250 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (p)).# define sq
2c260 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
2c270 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
2c280 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  el==0).#else.# d
2c290 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
2c2a0 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
2c2b0 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
2c2c0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
2c2d0 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
2c2e0 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
2c2f0 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
2c300 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
2c310 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
2c320 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
2c330 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2c340 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
2c350 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
2c360 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2c370 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
2c380 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
2c390 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c3a0 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
2c3b0 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
2c3c0 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
2c3d0 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
2c3e0 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
2c3f0 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65  el(p) 1.# define
2c400 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
2c410 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
2c420 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
2c430 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
2c440 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
2c450 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
2c460 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2c470 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
2c480 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
2c490 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
2c4a0 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
2c4b0 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
2c4c0 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
2c4d0 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
2c4e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
2c4f0 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
2c500 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
2c510 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
2c520 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
2c530 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
2c540 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
2c550 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
2c560 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2c570 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2c580 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
2c590 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
2c5a0 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
2c5b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2c5c0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
2c5d0 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
2c5e0 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
2c5f0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
2c600 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
2c610 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
2c620 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
2c630 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2c640 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
2c650 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
2c660 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
2c670 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
2c680 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
2c690 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2c6a0 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
2c6b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2c6c0 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
2c6d0 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
2c6e0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2c6f0 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
2c700 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
2c710 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2c720 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
2c730 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2c740 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
2c750 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
2c760 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
2c770 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
2c780 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
2c790 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
2c7a0 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
2c7b0 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
2c7c0 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
2c7d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2c7e0 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
2c7f0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2c800 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
2c810 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
2c820 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2c830 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
2c840 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
2c850 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
2c860 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
2c870 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
2c880 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
2c890 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
2c8a0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
2c8b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2c8c0 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
2c8d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c8e0 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73  OMIT_UTF16.int s
2c8f0 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
2c900 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
2c910 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
2c920 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2c930 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28  ite3Utf8CharLen(
2c940 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74  const char *pDat
2c950 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75  a, int nByte);.u
2c960 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65  32 sqlite3Utf8Re
2c970 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  ad(const u8**);.
2c980 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
2c990 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73  gEst(u64);.LogEs
2c9a0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41  t sqlite3LogEstA
2c9b0 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74  dd(LogEst,LogEst
2c9c0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2c9d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2c9e0 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  BLE.LogEst sqlit
2c9f0 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62  e3LogEstFromDoub
2ca00 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64  le(double);.#end
2ca10 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2ca20 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
2ca30 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c  T_SCANSTATUS) ||
2ca40 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53   \.    defined(S
2ca50 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
2ca60 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20  T3_OR_STAT4) || 
2ca70 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
2ca80 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54  LITE_EXPLAIN_EST
2ca90 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34  IMATED_ROWS).u64
2caa0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
2cab0 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e  Int(LogEst);.#en
2cac0 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74  dif.VList *sqlit
2cad0 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74  e3VListAdd(sqlit
2cae0 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74  e3*,VList*,const
2caf0 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b   char*,int,int);
2cb00 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2cb10 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61  ite3VListNumToNa
2cb20 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  me(VList*,int);.
2cb30 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74  int sqlite3VList
2cb40 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a  NameToNum(VList*
2cb50 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2cb60 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  );../*.** Routin
2cb70 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
2cb80 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
2cb90 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
2cba0 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
2cbb0 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
2cbc0 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
2cbd0 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
2cbe0 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
2cbf0 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  til.c.** file..*
2cc00 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
2cc10 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
2cc20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20  char*, u64);.u8 
2cc30 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2cc40 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2cc50 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
2cc60 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
2cc70 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
2cc80 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
2cc90 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2cca0 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
2ccb0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  ;../*.** The com
2ccc0 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20  mon case is for 
2ccd0 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61  a varint to be a
2cce0 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
2ccf0 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  hey following.**
2cd00 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74   macros handle t
2cd10 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
2cd20 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75  ithout a procedu
2cd30 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65  re call, but the
2cd40 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72  n call.** the pr
2cd50 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67  ocedure for larg
2cd60 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23  er varints..*/.#
2cd70 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
2cd80 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
2cd90 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
2cda0 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
2cdb0 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
2cdc0 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
2cdd0 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
2cde0 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
2cdf0 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
2ce00 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
2ce10 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
2ce20 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
2ce30 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2ce40 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  t((A),(B))).#def
2ce50 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
2ce60 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2ce70 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
2ce80 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
2ce90 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
2cea0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
2ceb0 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71  exAffinityStr(sq
2cec0 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b  lite3*, Index*);
2ced0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
2cee0 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
2cef0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2cf00 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
2cf10 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
2cf20 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
2cf30 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
2cf40 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
2cf50 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
2cf60 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
2cf70 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54 61 62  .char sqlite3Tab
2cf80 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  leColumnAffinity
2cf90 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68  (Table*,int);.ch
2cfa0 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
2cfb0 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
2cfc0 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
2cfd0 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
2cfe0 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
2cff0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  8);.int sqlite3D
2d000 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e  ecOrHexToI64(con
2d010 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b  st char*, i64*);
2d020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
2d030 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65  orWithMsg(sqlite
2d040 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2d050 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
2d060 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
2d070 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2d080 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72   sqlite3SystemEr
2d090 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
2d0a0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
2d0b0 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
2d0c0 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
2d0d0 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
2d0e0 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
2d0f0 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
2d100 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
2d110 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
2d120 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
2d130 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
2d140 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
2d150 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
2d160 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
2d170 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  (int);.#endif..#
2d180 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2d190 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a  BLE_DESERIALIZE.
2d1a0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62  int sqlite3Memdb
2d1b0 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64  Init(void);.#end
2d1c0 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  if..const char *
2d1d0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
2d1e0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
2d1f0 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20  eadSchema(Parse 
2d200 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65  *pParse);.CollSe
2d210 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f  q *sqlite3FindCo
2d220 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75  llSeq(sqlite3*,u
2d230 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61  8 enc, const cha
2d240 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  r*,int);.int sql
2d250 69 74 65 33 49 73 42 69 6e 61 72 79 28 63 6f 6e  ite3IsBinary(con
2d260 73 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f  st CollSeq*);.Co
2d270 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
2d280 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
2d290 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
2d2a0 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f   char*zName);.Co
2d2b0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
2d2c0 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
2d2d0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
2d2e0 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Expr);.CollSeq *
2d2f0 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c  sqlite3ExprNNCol
2d300 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
2d310 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29  se, Expr *pExpr)
2d320 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2d330 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61  rCollSeqMatch(Pa
2d340 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  rse*,Expr*,Expr*
2d350 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2d360 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
2d370 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
2d380 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
2d390 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78  Token*, int);.Ex
2d3a0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
2d3b0 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28  ddCollateString(
2d3c0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
2d3d0 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20  st char*);.Expr 
2d3e0 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
2d3f0 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a  Collate(Expr*);.
2d400 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2d410 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2d420 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
2d430 20 73 71 6c 69 74 65 33 57 72 69 74 61 62 6c 65   sqlite3Writable
2d440 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 29  Schema(sqlite3*)
2d450 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
2d460 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72  ckObjectName(Par
2d470 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  se *, const char
2d480 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2d490 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
2d4a0 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b  sqlite3 *, int);
2d4b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49  .int sqlite3AddI
2d4c0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2d4d0 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e  int sqlite3SubIn
2d4e0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
2d4f0 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  nt sqlite3MulInt
2d500 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
2d510 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  t sqlite3AbsInt3
2d520 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  2(int);.#ifdef S
2d530 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
2d540 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69  _NAMES.void sqli
2d550 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63  te3FileSuffix3(c
2d560 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
2d570 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2d580 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  ne sqlite3FileSu
2d590 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69  ffix3(X,Y).#endi
2d5a0 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42  f.u8 sqlite3GetB
2d5b0 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61  oolean(const cha
2d5c0 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74  r *z,u8);..const
2d5d0 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
2d5e0 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
2d5f0 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
2d600 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
2d610 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
2d620 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
2d630 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
2d640 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2d650 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
2d660 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20  *,u8,.          
2d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
2d680 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
2d690 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2d6a0 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f  SetNull(sqlite3_
2d6b0 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71  value*);.void sq
2d6c0 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73  lite3ValueFree(s
2d6d0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
2d6e0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
2d6f0 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73  qlite3ValueNew(s
2d700 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64  qlite3 *);.#ifnd
2d710 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
2d720 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c 69 74  TF16.char *sqlit
2d730 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
2d740 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
2d750 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e  *, int, u8);.#en
2d760 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  dif.int sqlite3V
2d770 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c  alueFromExpr(sql
2d780 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20  ite3 *, Expr *, 
2d790 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  u8, u8, sqlite3_
2d7a0 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20  value **);.void 
2d7b0 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
2d7c0 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  yAffinity(sqlite
2d7d0 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75  3_value *, u8, u
2d7e0 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
2d7f0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
2d800 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2d810 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2d820 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
2d830 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2d840 20 63 68 61 72 20 73 71 6c 69 74 65 33 53 74 72   char sqlite3Str
2d850 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e  BINARY[];.extern
2d860 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2d870 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65  char sqlite3Uppe
2d880 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65  rToLower[];.exte
2d890 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2d8a0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74  d char sqlite3Ct
2d8b0 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e  ypeMap[];.extern
2d8c0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c   const Token sql
2d8d0 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b  ite3IntTokens[];
2d8e0 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
2d8f0 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  SD struct Sqlite
2d900 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  3Config sqlite3C
2d910 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75  onfig;.extern Fu
2d920 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65  ncDefHash sqlite
2d930 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
2d940 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
2d950 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
2d960 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
2d970 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
2d980 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 56  .#endif.#ifdef V
2d990 44 42 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65  DBE_PROFILE.exte
2d9a0 72 6e 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36  rn sqlite3_uint6
2d9b0 34 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c  4 sqlite3NProfil
2d9c0 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  eCnt;.#endif.voi
2d9d0 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
2d9e0 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
2d9f0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2da00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
2da10 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
2da20 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
2da30 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
2da40 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2da50 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2da60 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
2da70 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
2da80 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2da90 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 43  ite3AlterRenameC
2daa0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72  olumn(Parse*, Sr
2dab0 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
2dac0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2dad0 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  ite3GetToken(con
2dae0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2daf0 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64   *, int *);.void
2db00 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61   sqlite3NestedPa
2db10 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  rse(Parse*, cons
2db20 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
2db30 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72  oid sqlite3Expir
2db40 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
2db50 6e 74 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  nts(sqlite3*, in
2db60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2db70 43 6f 64 65 52 68 73 4f 66 49 4e 28 50 61 72 73  CodeRhsOfIN(Pars
2db80 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2db90 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2dba0 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
2dbb0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
2dbc0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2dbd0 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
2dbe0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2dbf0 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
2dc00 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d  e3SelectWrongNum
2dc10 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65  TermsError(Parse
2dc20 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74   *pParse, Select
2dc30 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   *p);.int sqlite
2dc40 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
2dc50 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2dc60 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2dc70 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2dc80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2dc90 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
2dca0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2dcb0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2dcc0 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74  3ResolveExprList
2dcd0 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
2dce0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
2dcf0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2dd00 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
2dd10 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2dd20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69  NameContext*);.i
2dd30 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
2dd40 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50  eSelfReference(P
2dd50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
2dd60 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
2dd70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2dd80 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
2dd90 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
2dda0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
2ddb0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2ddc0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
2ddd0 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
2dde0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
2ddf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2de00 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
2de10 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
2de20 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
2de30 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
2de40 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
2de50 72 63 4c 69 73 74 20 2a 29 3b 0a 76 6f 69 64 20  rcList *);.void 
2de60 2a 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f  *sqlite3RenameTo
2de70 6b 65 6e 4d 61 70 28 50 61 72 73 65 2a 2c 20 76  kenMap(Parse*, v
2de80 6f 69 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  oid*, Token*);.v
2de90 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d  oid sqlite3Renam
2dea0 65 54 6f 6b 65 6e 52 65 6d 61 70 28 50 61 72 73  eTokenRemap(Pars
2deb0 65 2a 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20 76  e*, void *pTo, v
2dec0 6f 69 64 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f 69  oid *pFrom);.voi
2ded0 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 45  d sqlite3RenameE
2dee0 78 70 72 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c  xprUnmap(Parse*,
2def0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2df00 6c 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72 6c  lite3RenameExprl
2df10 69 73 74 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c  istUnmap(Parse*,
2df20 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 43 6f 6c   ExprList*);.Col
2df30 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74  lSeq *sqlite3Get
2df40 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20  CollSeq(Parse*, 
2df50 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63  u8, CollSeq *, c
2df60 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
2df70 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74  r sqlite3Affinit
2df80 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72  yType(const char
2df90 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69  *, Column*);.voi
2dfa0 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
2dfb0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2dfc0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2dfd0 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48  lite3InvokeBusyH
2dfe0 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c  andler(BusyHandl
2dff0 65 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  er*, sqlite3_fil
2e000 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2e010 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c  FindDb(sqlite3*,
2e020 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2e030 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
2e040 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2e050 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2e060 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
2e070 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69  d(sqlite3*,int i
2e080 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  DB);.void sqlite
2e090 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70  3DeleteIndexSamp
2e0a0 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64  les(sqlite3*,Ind
2e0b0 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
2e0c0 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
2e0d0 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2e0e0 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
2e0f0 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
2e100 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
2e110 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
2e120 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
2e130 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
2e140 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
2e150 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29  emaClear(void *)
2e160 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65  ;.Schema *sqlite
2e170 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74  3SchemaGet(sqlit
2e180 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a  e3 *, Btree *);.
2e190 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d  int sqlite3Schem
2e1a0 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33  aToIndex(sqlite3
2e1b0 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b   *db, Schema *);
2e1c0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2e1d0 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71  3KeyInfoAlloc(sq
2e1e0 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b  lite3*,int,int);
2e1f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79  .void sqlite3Key
2e200 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66  InfoUnref(KeyInf
2e210 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
2e220 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28  lite3KeyInfoRef(
2e230 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
2e240 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2e250 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a  foOfIndex(Parse*
2e260 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49 6e  , Index*);.KeyIn
2e270 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2e280 66 6f 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50  foFromExprList(P
2e290 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2e2a0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69  , int, int);..#i
2e2b0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2e2c0 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  G.int sqlite3Key
2e2d0 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28  InfoIsWriteable(
2e2e0 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69  KeyInfo*);.#endi
2e2f0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  f.int sqlite3Cre
2e300 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
2e310 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2e320 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
2e330 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  *,.  void (*)(sq
2e340 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
2e350 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
2e360 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29   **),.  void (*)
2e370 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2e380 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2e390 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69 64  lue **), .  void
2e3a0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2e3b0 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28  text*),.  void (
2e3c0 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2e3d0 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29  xt*),.  void (*)
2e3e0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2e3f0 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2e400 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e 63  lue **), .  Func
2e410 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
2e420 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20  tructor.);.void 
2e430 73 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74 72  sqlite3NoopDestr
2e440 75 63 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76 6f  uctor(void*);.vo
2e450 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75  id sqlite3OomFau
2e460 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  lt(sqlite3*);.vo
2e470 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65  id sqlite3OomCle
2e480 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ar(sqlite3*);.in
2e490 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
2e4a0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
2e4b0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
2e4c0 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
2e4d0 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
2e4e0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
2e4f0 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73  nit(StrAccum*, s
2e500 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20  qlite3*, char*, 
2e510 69 6e 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  int, int);.char 
2e520 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  *sqlite3StrAccum
2e530 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a  Finish(StrAccum*
2e540 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2e550 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65  electDestInit(Se
2e560 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e  lectDest*,int,in
2e570 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
2e580 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70  3CreateColumnExp
2e590 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63  r(sqlite3 *, Src
2e5a0 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  List *, int, int
2e5b0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2e5c0 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71  BackupRestart(sq
2e5d0 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b  lite3_backup *);
2e5e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
2e5f0 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65  kupUpdate(sqlite
2e600 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f  3_backup *, Pgno
2e610 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a  , const u8 *);..
2e620 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2e630 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74  MIT_SUBQUERY.int
2e640 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2e650 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72  kIN(Parse*, Expr
2e660 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2e670 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
2e680 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54  eckIN(x,y) SQLIT
2e690 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  E_OK.#endif..#if
2e6a0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2e6b0 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
2e6c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2e6d0 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lyzeFunctions(vo
2e6e0 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
2e6f0 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c  Stat4ProbeSetVal
2e700 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49  ue(.    Parse*,I
2e710 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65  ndex*,UnpackedRe
2e720 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74  cord**,Expr*,int
2e730 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ,int,int*);.int 
2e740 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75  sqlite3Stat4Valu
2e750 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a  eFromExpr(Parse*
2e760 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c  , Expr*, u8, sql
2e770 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76  ite3_value**);.v
2e780 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
2e790 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
2e7a0 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20  edRecord*);.int 
2e7b0 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
2e7c0 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  mn(sqlite3*, con
2e7d0 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69  st void*, int, i
2e7e0 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
2e7f0 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  e**);.char sqlit
2e800 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66  e3IndexColumnAff
2e810 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20  inity(sqlite3*, 
2e820 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65  Index*, int);.#e
2e830 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2e840 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2e850 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64   LEMON-generated
2e860 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64   parser.*/.#ifnd
2e870 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
2e880 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73  MATION.  void *s
2e890 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
2e8a0 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 2c  c(void*(*)(u64),
2e8b0 20 50 61 72 73 65 2a 29 3b 0a 20 20 76 6f 69 64   Parse*);.  void
2e8c0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
2e8d0 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
2e8e0 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64 69  )(void*));.#endi
2e8f0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  f.void sqlite3Pa
2e900 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
2e910 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74 20 73 71 6c   Token);.int sql
2e920 69 74 65 33 50 61 72 73 65 72 46 61 6c 6c 62 61  ite3ParserFallba
2e930 63 6b 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  ck(int);.#ifdef 
2e940 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44  YYTRACKMAXSTACKD
2e950 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74  EPTH.  int sqlit
2e960 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61  e3ParserStackPea
2e970 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66  k(void*);.#endif
2e980 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75  ..void sqlite3Au
2e990 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73  toLoadExtensions
2e9a0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e  (sqlite3*);.#ifn
2e9b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e9c0 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
2e9d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f   void sqlite3Clo
2e9e0 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  seExtensions(sql
2e9f0 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  ite3*);.#else.# 
2ea00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c  define sqlite3Cl
2ea10 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29  oseExtensions(X)
2ea20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
2ea30 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
2ea40 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64  RED_CACHE.  void
2ea50 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2ea60 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20  k(Parse *, int, 
2ea70 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  int, u8, const c
2ea80 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  har *);.#else.  
2ea90 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54  #define sqlite3T
2eaa0 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79  ableLock(v,w,x,y
2eab0 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,z).#endif..#ifd
2eac0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
2ead0 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38   int sqlite3Utf8
2eae0 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61  To8(unsigned cha
2eaf0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
2eb00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2eb10 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
2eb20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2eb30 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65  abClear(Y).#  de
2eb40 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2eb50 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45  Sync(X,Y) SQLITE
2eb60 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
2eb70 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
2eb80 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2eb90 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2eba0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2ebb0 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
2ebc0 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20  db) 0.#  define 
2ebd0 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
2ebe0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2ebf0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58  ite3VtabUnlock(X
2ec00 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2ec10 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2ec20 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2ec30 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
2ec40 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c  int(X, Y, Z) SQL
2ec50 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2ec60 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c   sqlite3GetVTabl
2ec70 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65  e(X,Y)  ((VTable
2ec80 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f  *)0).#else.   vo
2ec90 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  id sqlite3VtabCl
2eca0 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ear(sqlite3 *db,
2ecb0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69   Table*);.   voi
2ecc0 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73  d sqlite3VtabDis
2ecd0 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20  connect(sqlite3 
2ece0 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a  *db, Table *p);.
2ecf0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2ed00 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
2ed10 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69  db, Vdbe*);.   i
2ed20 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
2ed30 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
2ed40 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
2ed50 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
2ed60 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
2ed70 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
2ed80 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
2ed90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2eda0 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
2edb0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2edc0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2edd0 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
2ede0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
2edf0 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
2ee00 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
2ee10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2ee20 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56  abImportErrmsg(V
2ee30 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  dbe*, sqlite3_vt
2ee40 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  ab*);.   VTable 
2ee50 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
2ee60 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
2ee70 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a  e*);.   Module *
2ee80 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61 74  sqlite3VtabCreat
2ee90 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71  eModule(.     sq
2eea0 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e  lite3*,.     con
2eeb0 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63  st char*,.     c
2eec0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2eed0 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a  ule*,.     void*
2eee0 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76  ,.     void(*)(v
2eef0 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64  oid*).   );.#  d
2ef00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2ef10 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62  bInSync(db) ((db
2ef20 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20  )->nVTrans>0 && 
2ef30 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30  (db)->aVTrans==0
2ef40 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
2ef50 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
2ef60 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65  sTableInit(Parse
2ef70 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
2ef80 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
2ef90 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28  ymousTableClear(
2efa0 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a  sqlite3*,Module*
2efb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2efc0 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28  tabMakeWritable(
2efd0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
2efe0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2eff0 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
2f000 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2f010 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
2f020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2f030 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72  bFinishParse(Par
2f040 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
2f050 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
2f060 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76  gInit(Parse*);.v
2f070 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
2f080 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c  rgExtend(Parse*,
2f090 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2f0a0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2f0b0 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ate(sqlite3*, in
2f0c0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
2f0d0 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73   char **);.int s
2f0e0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f  qlite3VtabCallCo
2f0f0 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61  nnect(Parse*, Ta
2f100 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
2f110 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
2f120 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  y(sqlite3*, int,
2f130 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2f140 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42  int sqlite3VtabB
2f150 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20  egin(sqlite3 *, 
2f160 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44  VTable *);.FuncD
2f170 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f  ef *sqlite3VtabO
2f180 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28  verloadFunction(
2f190 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65  sqlite3 *,FuncDe
2f1a0 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
2f1b0 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  pr*);.sqlite3_in
2f1c0 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
2f1d0 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
2f1e0 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
2f1f0 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
2f200 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
2f210 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2f220 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2f230 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
2f240 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
2f250 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
2f260 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2f270 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
2f280 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
2f290 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c 49  E_ENABLE_NORMALI
2f2a0 5a 45 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  ZE.char *sqlite3
2f2b0 4e 6f 72 6d 61 6c 69 7a 65 28 56 64 62 65 2a 2c  Normalize(Vdbe*,
2f2c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
2f2d0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2f2e0 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
2f2f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2f300 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
2f310 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
2f320 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
2f330 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
2f340 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
2f350 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
2f360 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
2f370 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
2f380 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
2f390 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73   sqlite3*);.cons
2f3a0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
2f3b0 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
2f3c0 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
2f3d0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
2f3e0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
2f3f0 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
2f400 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
2f410 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  nt*);.  int sqli
2f420 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
2f430 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  k(void*,sqlite3*
2f440 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2f450 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  );.#endif.#ifnde
2f460 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54  f SQLITE_OMIT_CT
2f470 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65  E.  With *sqlite
2f480 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c  3WithAdd(Parse*,
2f490 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  With*,Token*,Exp
2f4a0 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b  rList*,Select*);
2f4b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
2f4c0 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ithDelete(sqlite
2f4d0 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69  3*,With*);.  voi
2f4e0 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  d sqlite3WithPus
2f4f0 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c  h(Parse*, With*,
2f500 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66   u8);.#else.#def
2f510 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50  ine sqlite3WithP
2f520 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69  ush(x,y,z).#defi
2f530 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  ne sqlite3WithDe
2f540 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66  lete(x,y).#endif
2f550 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f560 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55 70  OMIT_UPSERT.  Up
2f570 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73  sert *sqlite3Ups
2f580 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a 2c  ertNew(sqlite3*,
2f590 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
2f5a0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
2f5b0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2f5c0 55 70 73 65 72 74 44 65 6c 65 74 65 28 73 71 6c  UpsertDelete(sql
2f5d0 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ite3*,Upsert*);.
2f5e0 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65    Upsert *sqlite
2f5f0 33 55 70 73 65 72 74 44 75 70 28 73 71 6c 69 74  3UpsertDup(sqlit
2f600 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20  e3*,Upsert*);.  
2f610 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65 72  int sqlite3Upser
2f620 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28 50  tAnalyzeTarget(P
2f630 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 55  arse*,SrcList*,U
2f640 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64 20  psert*);.  void 
2f650 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f 55  sqlite3UpsertDoU
2f660 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70 73  pdate(Parse*,Ups
2f670 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64 65  ert*,Table*,Inde
2f680 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  x*,int);.#else.#
2f690 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70  define sqlite3Up
2f6a0 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79 2c  sertNew(v,w,x,y,
2f6b0 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a  z) ((Upsert*)0).
2f6c0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
2f6d0 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79 29  psertDelete(x,y)
2f6e0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2f6f0 55 70 73 65 72 74 44 75 70 28 78 2c 79 29 20 20  UpsertDup(x,y)  
2f700 20 20 20 20 20 28 28 55 70 73 65 72 74 2a 29 30       ((Upsert*)0
2f710 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65  ).#endif.../* De
2f720 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
2f730 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
2f740 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
2f750 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
2f760 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
2f770 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
2f780 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
2f790 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
2f7a0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
2f7b0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
2f7c0 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
2f7d0 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
2f7e0 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
2f7f0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
2f800 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
2f810 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
2f820 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
2f830 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
2f840 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
2f850 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
2f860 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
2f870 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65  ty is.** provide
2f880 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f  d (enforcement o
2f890 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  f FK constraints
2f8a0 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72   requires the tr
2f8b0 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65  iggers sub-syste
2f8c0 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  m)..*/.#if !defi
2f8d0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2f8e0 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
2f8f0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2f900 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
2f910 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68  void sqlite3FkCh
2f920 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  eck(Parse*, Tabl
2f930 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
2f940 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
2f950 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
2f960 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
2f970 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
2f980 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2f990 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
2f9a0 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
2f9b0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  *, int, int*, in
2f9c0 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
2f9d0 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73  3FkRequired(Pars
2f9e0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a  e*, Table*, int*
2f9f0 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71  , int);.  u32 sq
2fa00 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50  lite3FkOldmask(P
2fa10 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
2fa20 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46    FKey *sqlite3F
2fa30 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c  kReferences(Tabl
2fa40 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  e *);.#else.  #d
2fa50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41  efine sqlite3FkA
2fa60 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65  ctions(a,b,c,d,e
2fa70 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
2fa80 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62  lite3FkCheck(a,b
2fa90 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
2faa0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  ine sqlite3FkDro
2fab0 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20  pTable(a,b,c).  
2fac0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2fad0 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20  kOldmask(a,b)   
2fae0 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e        0.  #defin
2faf0 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  e sqlite3FkRequi
2fb00 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20  red(a,b,c,d)    
2fb10 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2fb20 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
2fb30 61 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64  a)        0.#end
2fb40 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2fb50 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2fb60 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  EY.  void sqlite
2fb70 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65  3FkDelete(sqlite
2fb80 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  3 *, Table*);.  
2fb90 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  int sqlite3FkLoc
2fba0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
2fbb0 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64  Table*,FKey*,Ind
2fbc0 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c  ex**,int**);.#el
2fbd0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2fbe0 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62  ite3FkDelete(a,b
2fbf0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2fc00 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
2fc10 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64  (a,b,c,d,e).#end
2fc20 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
2fc30 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
2fc40 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
2fc50 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
2fc60 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
2fc70 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
2fc80 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
2fc90 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
2fca0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
2fcb0 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
2fcc0 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
2fcd0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
2fce0 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
2fcf0 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
2fd00 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
2fd10 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
2fd20 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
2fd30 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
2fd40 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73  UNTESTABLE.** is
2fd50 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
2fd60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2fd70 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f 69  UNTESTABLE.  voi
2fd80 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  d sqlite3BeginBe
2fd90 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
2fda0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2fdb0 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
2fdc0 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23  void);.#else.  #
2fdd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65  define sqlite3Be
2fde0 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
2fdf0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2fe00 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
2fe10 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  oc().#endif../*.
2fe20 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  ** Allowed retur
2fe30 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
2fe40 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
2fe50 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ().*/.#define IN
2fe60 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20  _INDEX_ROWID    
2fe70 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63      1   /* Searc
2fe80 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  h the rowid of t
2fe90 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  he table */.#def
2fea0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48  ine IN_INDEX_EPH
2feb0 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a            2   /*
2fec0 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d   Search an ephem
2fed0 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23  eral b-tree */.#
2fee0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2fef0 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20  INDEX_ASC    3  
2ff00 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
2ff10 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  ex ASCENDING */.
2ff20 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2ff30 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20  _INDEX_DESC   4 
2ff40 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
2ff50 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a  dex DESCENDING *
2ff60 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2ff70 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20  EX_NOOP         
2ff80 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20  5   /* No table 
2ff90 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63  available. Use c
2ffa0 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a  omparisons */./*
2ffb0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67  .** Allowed flag
2ffc0 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61  s for the 3rd pa
2ffd0 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
2ffe0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e  e3FindInIndex().
2fff0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
30000 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20  NDEX_NOOP_OK    
30010 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74   0x0001  /* OK t
30020 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45  o return IN_INDE
30030 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e  X_NOOP */.#defin
30040 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45  e IN_INDEX_MEMBE
30050 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f  RSHIP  0x0002  /
30060 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
30070 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69  ed for membershi
30080 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e  p test */.#defin
30090 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20  e IN_INDEX_LOOP 
300a0 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
300b0 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
300c0 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a  ed as a loop */.
300d0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
300e0 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
300f0 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74  Expr *, u32, int
30100 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  *, int*, int*);.
30110 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
30120 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
30130 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  vfs *, const cha
30140 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  r *, sqlite3_fil
30150 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
30160 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
30170 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76  alSize(sqlite3_v
30180 66 73 20 2a 29 3b 0a 23 69 66 20 64 65 66 69 6e  fs *);.#if defin
30190 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
301a0 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 20 5c  _ATOMIC_WRITE) \
301b0 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  . || defined(SQL
301c0 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48  ITE_ENABLE_BATCH
301d0 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a 20  _ATOMIC_WRITE). 
301e0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
301f0 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  nalCreate(sqlite
30200 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69  3_file *);.#endi
30210 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
30220 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28  urnalIsInMemory(
30230 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29  sqlite3_file *p)
30240 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
30250 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  mJournalOpen(sql
30260 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76  ite3_file *);..v
30270 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53  oid sqlite3ExprS
30280 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73  etHeightAndFlags
30290 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
302a0 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51  Expr *p);.#if SQ
302b0 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45  LITE_MAX_EXPR_DE
302c0 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69  PTH>0.  int sqli
302d0 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
302e0 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20  ght(Select *);. 
302f0 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72   int sqlite3Expr
30300 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73  CheckHeight(Pars
30310 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  e*, int);.#else.
30320 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
30330 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
30340 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65  t(x) 0.  #define
30350 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
30360 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e  kHeight(x,y).#en
30370 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33  dif..u32 sqlite3
30380 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75  Get4byte(const u
30390 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
303a0 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75  3Put4byte(u8*, u
303b0 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  32);..#ifdef SQL
303c0 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
303d0 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20  K_NOTIFY.  void 
303e0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
303f0 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  nBlocked(sqlite3
30400 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a   *, sqlite3 *);.
30410 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
30420 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
30430 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
30440 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
30450 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71  nectionClosed(sq
30460 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73  lite3 *db);.#els
30470 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
30480 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
30490 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66  cked(x,y).  #def
304a0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
304b0 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29  ctionUnlocked(x)
304c0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
304d0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
304e0 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ed(x).#endif..#i
304f0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
30500 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
30510 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45  ParserTrace(FILE
30520 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64  *, char *);.#end
30530 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 59  if.#if defined(Y
30540 59 43 4f 56 45 52 41 47 45 29 0a 20 20 69 6e 74  YCOVERAGE).  int
30550 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 43 6f   sqlite3ParserCo
30560 76 65 72 61 67 65 28 46 49 4c 45 2a 29 3b 0a 23  verage(FILE*);.#
30570 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
30580 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
30590 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73  E IOTRACE exists
305a0 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c   then the global
305b0 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c   variable.** sql
305c0 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61  ite3IoTrace is a
305d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72   pointer to a pr
305e0 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e  intf-like routin
305f0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69  e used to.** pri
30600 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d  nt I/O tracing m
30610 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64  essages..*/.#ifd
30620 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
30630 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e  _IOTRACE.# defin
30640 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66  e IOTRACE(A)  if
30650 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  ( sqlite3IoTrace
30660 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61   ){ sqlite3IoTra
30670 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73  ce A; }.  void s
30680 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
30690 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c  eSql(Vdbe*);.SQL
306a0 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45  ITE_API SQLITE_E
306b0 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49  XTERN void (SQLI
306c0 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65  TE_CDECL *sqlite
306d0 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
306e0 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
306f0 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
30700 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
30710 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
30720 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
30730 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
30740 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
30750 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
30760 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
30770 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
30780 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
30790 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
307a0 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
307b0 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
307c0 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
307d0 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
307e0 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
307f0 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
30800 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
30810 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
30820 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
30830 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
30840 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
30850 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
30860 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
30870 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
30880 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
30890 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
308a0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
308b0 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
308c0 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
308d0 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
308e0 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
308f0 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
30900 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
30910 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
30920 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
30930 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
30940 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
30950 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
30960 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
30970 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
30980 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
30990 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
309a0 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
309b0 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
309c0 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
309d0 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
309e0 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
309f0 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
30a00 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
30a10 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
30a20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
30a30 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
30a40 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
30a50 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
30a60 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
30a70 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
30a80 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
30a90 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
30aa0 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
30ab0 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
30ac0 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
30ad0 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
30ae0 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
30af0 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
30b00 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
30b10 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
30b20 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
30b30 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
30b40 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
30b50 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
30b60 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
30b70 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
30b80 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
30b90 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
30ba0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
30bb0 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
30bc0 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
30bd0 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
30be0 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
30bf0 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
30c00 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
30c10 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
30c20 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41  straint..**.** A
30c30 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f  ll of this is no
30c40 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63  -op for a produc
30c50 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20  tion build.  It 
30c60 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a  only comes into.
30c70 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65  ** play when the
30c80 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
30c90 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
30ca0 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  tion is used..*/
30cb0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
30cc0 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  EMDEBUG.  void s
30cd0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
30ce0 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  tType(void*,u8);
30cf0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
30d00 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f  mdebugHasType(vo
30d10 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
30d20 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
30d30 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
30d40 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
30d50 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
30d60 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e  tType(X,Y)  /* n
30d70 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65  o-op */.# define
30d80 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30d90 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a  HasType(X,Y)  1.
30da0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
30db0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58  MemdebugNoType(X
30dc0 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23  ,Y)   1.#endif.#
30dd0 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48  define MEMTYPE_H
30de0 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20  EAP       0x01  
30df0 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20  /* General heap 
30e00 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
30e10 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c  define MEMTYPE_L
30e20 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20  OOKASIDE  0x02  
30e30 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69 67  /* Heap that mig
30e40 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f  ht have been loo
30e50 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e  kaside */.#defin
30e60 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45  e MEMTYPE_PCACHE
30e70 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 50 61       0x04  /* Pa
30e80 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74  ge cache allocat
30e90 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ions */../*.** T
30ea0 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61  hreading interfa
30eb0 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  ce.*/.#if SQLITE
30ec0 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
30ed0 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65  ADS>0.int sqlite
30ee0 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51  3ThreadCreate(SQ
30ef0 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69  LiteThread**,voi
30f00 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69  d*(*)(void*),voi
30f10 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
30f20 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74  ThreadJoin(SQLit
30f30 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a  eThread*, void**
30f40 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
30f50 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
30f60 41 42 4c 45 5f 44 42 50 41 47 45 5f 56 54 41 42  ABLE_DBPAGE_VTAB
30f70 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
30f80 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71  ITE_TEST).int sq
30f90 6c 69 74 65 33 44 62 70 61 67 65 52 65 67 69 73  lite3DbpageRegis
30fa0 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ter(sqlite3*);.#
30fb0 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
30fc0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
30fd0 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20  DBSTAT_VTAB) || 
30fe0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
30ff0 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33  EST).int sqlite3
31000 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28 73  DbstatRegister(s
31010 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66  qlite3*);.#endif
31020 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ..int sqlite3Exp
31030 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78 70 72  rVectorSize(Expr
31040 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
31050 6c 69 74 65 33 45 78 70 72 49 73 56 65 63 74 6f  lite3ExprIsVecto
31060 72 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  r(Expr *pExpr);.
31070 45 78 70 72 20 2a 73 71 6c 69 74 65 33 56 65 63  Expr *sqlite3Vec
31080 74 6f 72 46 69 65 6c 64 53 75 62 65 78 70 72 28  torFieldSubexpr(
31090 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70  Expr*, int);.Exp
310a0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 6f  r *sqlite3ExprFo
310b0 72 56 65 63 74 6f 72 46 69 65 6c 64 28 50 61 72  rVectorField(Par
310c0 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  se*,Expr*,int);.
310d0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 65 63 74  void sqlite3Vect
310e0 6f 72 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  orErrorMsg(Parse
310f0 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 69 66 6e  *, Expr*);..#ifn
31100 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31110 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
31120 41 47 53 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  AGS.const char *
31130 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f  *sqlite3CompileO
31140 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70  ptions(int *pnOp
31150 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64  t);.#endif..#end
31160 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f  if /* SQLITEINT_
31170 48 20 2a 2f 0a                                   H */.