/ Hex Artifact Content
Login

Artifact 7a67213db1f6217432948f3d898473f48ccfe9c1bc37a11b8d2b8c978fda517c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
6dd0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
6de0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
6df0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
6e00: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
6e10: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
6e20: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
6e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
6e40: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6e50: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
6e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
6e70: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
6e80: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
6e90: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ea0: 5f 5f 61 72 6d 5f 5f 29 20 20 7c 7c 20 64 65 66  __arm__)  || def
6eb0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 36 34 29 0a 23  ined(_M_ARM64).#
6ec0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ed0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
6ee0: 33 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65  34.# elif define
6ef0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
6f00: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a  efined(__ppc__).
6f10: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6f20: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6f30: 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  321.# else.#   d
6f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6f50: 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66  EORDER 0.# endif
6f60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
6f70: 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33  TE_BYTEORDER==43
6f80: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
6f90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6fa0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6fb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
6fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6fd0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
6fe0: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c  LITE_UTF16BE.#el
6ff0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
7000: 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69  DER==1234.# defi
7010: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
7020: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
7030: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7040: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
7050: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7060: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
7070: 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65  6LE.#else.# ifde
7080: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
7090: 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e  ATION.  const in
70a0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31  t sqlite3one = 1
70b0: 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72  ;.# else.  exter
70c0: 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  n const int sqli
70d0: 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a  te3one;.# endif.
70e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70f0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
7100: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
7110: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
7120: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7130: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
7140: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
7150: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
7160: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
7170: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
7180: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
7190: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
71a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
71b0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
71c0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
71d0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
71e0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
71f0: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
7200: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
7210: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
7220: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
7230: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
7240: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
7250: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
7260: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
7270: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
7280: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
7290: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
72a0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
72b0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
72c0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61  /*.** Round up a
72d0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e   number to the n
72e0: 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69  ext larger multi
72f0: 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20  ple of 8.  This 
7300: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f  is used.** to fo
7310: 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e  rce 8-byte align
7320: 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61  ment on 64-bit a
7330: 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f  rchitectures..*/
7340: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28  .#define ROUND8(
7350: 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26  x)     (((x)+7)&
7360: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  ~7)../*.** Round
7370: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61   down to the nea
7380: 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rest multiple of
7390: 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f   8.*/.#define RO
73a0: 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29  UNDDOWN8(x) ((x)
73b0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65  &~7)../*.** Asse
73c0: 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e  rt that the poin
73d0: 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64  ter X is aligned
73e0: 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   to an 8-byte bo
73f0: 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a  undary.  This.**
7400: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f   macro is used o
7410: 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72  nly within asser
7420: 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68  t() to verify th
7430: 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73  at the code gets
7440: 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e  .** all alignmen
7450: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63  t restrictions c
7460: 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78  orrect..**.** Ex
7470: 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f  cept, if SQLITE_
7480: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
7490: 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64  ALLOC is defined
74a0: 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e  , then the.** un
74b0: 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28  derlying malloc(
74c0: 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ) implementation
74d0: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
74e0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
74f0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
7500: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
7510: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
7520: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
7530: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
7540: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
7550: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
7560: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
7570: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
7580: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
7590: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
75a0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
75b0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
75c0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
75d0: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
75e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
75f0: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
7600: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
7610: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
7620: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
7630: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
7640: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
7650: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
7660: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7670: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7690: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
76a0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
76b0: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
76c0: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
76d0: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
76e0: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
76f0: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
7700: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
7710: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64  itionals.h>.#end
7720: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
7730: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7740: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
7750: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
7760: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
7770: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
7780: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
7790: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
77a0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
77b0: 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66  _sun) \.  || def
77c0: 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f  ined(__FreeBSD__
77d0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
77e0: 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a  (__DragonFly__).
77f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
7800: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7810: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
7820: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
7830: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
7840: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7850: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
7860: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
7870: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
7880: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
7890: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
78a0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
78b0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
78c0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
78d0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
78e0: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
78f0: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
7900: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
7910: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
7920: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7930: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7940: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7950: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7960: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7970: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7980: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7990: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
79a0: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
79b0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
79c0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
79d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
79e0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
79f0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
7a00: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
7a10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7a20: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7a30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7a40: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7a50: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7a60: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7a70: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7a80: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7a90: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7aa0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7ab0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7ac0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7ad0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
7ae0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
7af0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7b00: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7b10: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7b20: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7b30: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7b40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7b50: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7b60: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7b70: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7b80: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7b90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ba0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
7bc0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
7bd0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
7be0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
7bf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
7c00: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
7c10: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7c20: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7c30: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7c40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7c50: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
7c60: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
7c70: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
7c80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
7c90: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
7ca0: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
7cb0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7cc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7cd0: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
7ce0: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
7cf0: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
7d00: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
7d10: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
7d20: 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndle..**.** The 
7d30: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7d40: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
7d50: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
7d60: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
7d70: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
7d80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7d90: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
7da0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
7db0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
7dc0: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
7dd0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
7de0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
7e10: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
7e20: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
7e30: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
7e40: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
7e50: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
7e60: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
7e70: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
7e80: 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f  xBusyHandler)(vo
7e90: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
7ea0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
7eb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73   */.  void *pBus
7ec0: 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  yArg;           
7ed0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7ee0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
7ef0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
7f00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7f20: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7f30: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
7f40: 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69  */.  u8 bExtraFi
7f50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
7f60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64         /* Includ
7f70: 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61  e sqlite3_file a
7f80: 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a  s callback arg *
7f90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7fa0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7fb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7fc0: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7fd0: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7fe0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7ff0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
8000: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
8010: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
8020: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
8030: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
8040: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
8050: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
8060: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
8070: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
8080: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
8090: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
80a0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
80b0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
80c0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80d0: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
80e0: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
80f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
8100: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
8110: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
8120: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
8130: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
8140: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
8150: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
8160: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
8170: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
8180: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
8190: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
81a0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
81b0: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
81c0: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
81d0: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
81e0: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
81f0: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
8200: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
8210: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
8220: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
8230: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
8240: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
8250: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
8260: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
8270: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
8280: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
8290: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
82a0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
82b0: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
82c0: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
82d0: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
82e0: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
82f0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
8300: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
8310: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
8320: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
8330: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
8340: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
8350: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
8360: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
8370: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
8380: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
8390: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
83a0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
83b0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
83c0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
83d0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
83e0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
83f0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
8400: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
8410: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
8420: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
8430: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
8440: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
8450: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
8460: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
8470: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
8480: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
8490: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
84a0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
84b0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
84c0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
84d0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
84e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
84f0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
8500: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
8510: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
8520: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
8530: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
8540: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
8550: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
8560: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
8570: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
8580: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
8590: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
85a0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
85b0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
85c0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
85d0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
85e0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
85f0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
8600: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
8610: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8620: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
8630: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
8640: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
8650: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
8660: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
8670: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8680: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8690: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
86a0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
86b0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
86c0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
86d0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
86e0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
86f0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
8700: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8710: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
8720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8730: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
8740: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
8750: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
8760: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
8770: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8780: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8790: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
87a0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
87b0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
87c0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
87d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
87e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
87f0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
8800: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8810: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
8820: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
8830: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
8840: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
8850: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
8860: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
8870: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8880: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
88a0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
88b0: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
88c0: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
88d0: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
88e0: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
88f0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
8900: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8910: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
8920: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
8930: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
8940: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
8950: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
8960: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
8970: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8980: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8990: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
89a0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
89b0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
89c0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
89d0: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
89e0: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
89f0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
8a00: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8a10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
8a20: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
8a30: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
8a40: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
8a50: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
8a60: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
8a70: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8a80: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8a90: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8aa0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
8ab0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
8ac0: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
8ad0: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
8ae0: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
8af0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
8b00: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8b10: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
8b20: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
8b30: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
8b40: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
8b50: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
8b60: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
8b70: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8b80: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8b90: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8ba0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
8bb0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
8bc0: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
8bd0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
8be0: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
8bf0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
8c00: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8c10: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
8c20: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
8c30: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
8c40: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
8c50: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
8c60: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8c70: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8c80: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8c90: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8ca0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
8cb0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
8cc0: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
8cd0: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
8ce0: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
8cf0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
8d00: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8d10: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8d20: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
8d30: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
8d50: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
8d60: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
8d70: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8d80: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8d90: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8da0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
8db0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
8dc0: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
8dd0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
8de0: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
8df0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
8e00: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8e10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
8e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
8e40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
8e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
8e90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
8ea0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
8eb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8ec0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
8ed0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ee0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
8ef0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
8f00: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
8f10: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
8f20: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
8f30: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
8f40: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f50: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
8f60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8f70: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
8f80: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
8fa0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
8fb0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
8fc0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
8fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fe0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
9000: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
9010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9020: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
9030: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61  RenameToken Rena
9060: 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  meToken;.typedef
9070: 20 73 74 72 75 63 74 20 46 61 73 74 50 72 6e 67   struct FastPrng
9080: 20 46 61 73 74 50 72 6e 67 3b 0a 74 79 70 65 64   FastPrng;.typed
9090: 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74  ef struct RowSet
90a0: 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66   RowSet;.typedef
90b0: 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e   struct Savepoin
90c0: 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70  t Savepoint;.typ
90d0: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
90e0: 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64  ct Select;.typed
90f0: 65 66 20 73 74 72 75 63 74 20 53 51 4c 69 74 65  ef struct SQLite
9100: 54 68 72 65 61 64 20 53 51 4c 69 74 65 54 68 72  Thread SQLiteThr
9110: 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ead;.typedef str
9120: 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53  uct SelectDest S
9130: 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64  electDest;.typed
9140: 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  ef struct SrcLis
9150: 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64  t SrcList;.typed
9160: 65 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  ef struct sqlite
9170: 33 5f 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20  3_str StrAccum; 
9180: 2f 2a 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61  /* Internal alia
9190: 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74  s for sqlite3_st
91a0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  r */.typedef str
91b0: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
91c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
91d0: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
91e0: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
91f0: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
9200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9210: 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65  TreeView TreeVie
9220: 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  w;.typedef struc
9230: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
9240: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
9250: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
9260: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
9270: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
9280: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
9290: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
92a0: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
92b0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
92c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 70  ypedef struct Up
92d0: 73 65 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70  sert Upsert;.typ
92e0: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
92f0: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
9300: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
9310: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
9320: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
9330: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
9340: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
9350: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70  o WhereInfo;.typ
9360: 65 64 65 66 20 73 74 72 75 63 74 20 57 69 6e 64  edef struct Wind
9370: 6f 77 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64  ow Window;.typed
9380: 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57  ef struct With W
9390: 69 74 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ith;.../*.** The
93a0: 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
93b0: 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
93c0: 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
93d0: 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
93e0: 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
93f0: 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
9400: 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
9410: 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
9420: 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
9430: 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
9440: 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
9450: 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
9460: 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
9470: 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
9480: 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
9490: 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66   on ix86..*/.#if
94a0: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41  def SQLITE_BITMA
94b0: 53 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65  SK_TYPE.  typede
94c0: 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
94d0: 5f 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23  _TYPE Bitmask;.#
94e0: 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
94f0: 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64  64 Bitmask;.#end
9500: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  if../*.** The nu
9510: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20  mber of bits in 
9520: 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53  a Bitmask.  "BMS
9530: 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b  " means "BitMask
9540: 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Size"..*/.#defi
9550: 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73  ne BMS  ((int)(s
9560: 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38  izeof(Bitmask)*8
9570: 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20  ))../*.** A bit 
9580: 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a  in a Bitmask.*/.
9590: 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28  #define MASKBIT(
95a0: 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29  n)   (((Bitmask)
95b0: 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65  1)<<(n)).#define
95c0: 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28   MASKBIT32(n) ((
95d0: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29  (unsigned int)1)
95e0: 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41  <<(n)).#define A
95f0: 4c 4c 42 49 54 53 20 20 20 20 20 20 28 28 42 69  LLBITS      ((Bi
9600: 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20  tmask)-1)../* A 
9610: 56 4c 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63  VList object rec
9620: 6f 72 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62  ords a mapping b
9630: 65 74 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72  etween parameter
9640: 73 2f 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64  s/variables/wild
9650: 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20  cards.** in the 
9660: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73  SQL statement (s
9670: 75 63 68 20 61 73 20 24 61 62 63 2c 20 40 70 71  uch as $abc, @pq
9680: 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20  r, or :xyz) and 
9690: 74 68 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76  the integer.** v
96a0: 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61  ariable number a
96b0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
96c0: 68 61 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20  hat parameter.  
96d0: 53 65 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64  See the format d
96e0: 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e  escription.** on
96f0: 20 74 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73   the sqlite3VLis
9700: 74 41 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66  tAdd() routine f
9710: 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74  or more informat
9720: 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73  ion.  A VList is
9730: 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20   really.** just 
9740: 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65  an array of inte
9750: 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  gers..*/.typedef
9760: 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a   int VList;../*.
9770: 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e  ** Defer sourcin
9780: 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72  g vdbe.h and btr
9790: 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72  ee.h until after
97a0: 20 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a   the "u8" and.**
97b0: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
97c0: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
97d0: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
97e0: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
97f0: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
9800: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
9810: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
9820: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
9830: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
9840: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
9850: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
9860: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
9870: 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a  #include "os.h".
9880: 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e  #include "mutex.
9890: 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54  h"../* The SQLIT
98a0: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20  E_EXTRA_DURABLE 
98b0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
98c0: 69 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20  ion used to set 
98d0: 74 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73  the default.** s
98e0: 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69  ynchronous setti
98f0: 6e 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74  ng to EXTRA.  It
9900: 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75   is no longer su
9910: 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64  pported..*/.#ifd
9920: 65 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f  ef SQLITE_EXTRA_
9930: 44 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e  DURABLE.# warnin
9940: 67 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46  g Use SQLITE_DEF
9950: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9960: 3d 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51  =3 instead of SQ
9970: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
9980: 4c 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  LE.# define SQLI
9990: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
99a0: 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a  RONOUS 3.#endif.
99b0: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73  ./*.** Default s
99c0: 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c  ynchronous level
99d0: 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
99e0: 61 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61  at (for historca
99f0: 6c 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50  l reasons) the P
9a00: 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AGER_SYNCHRONOUS
9a10: 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72  _* macros differ
9a20: 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  .** from the SQL
9a30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9a40: 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79  HRONOUS value by
9a50: 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20   1..**.**       
9a60: 20 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52      PAGER_SYNCHR
9a70: 4f 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46 41  ONOUS       DEFA
9a80: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
9a90: 2a 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20 20  **   OFF        
9aa0: 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20     1            
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a               0.*
9ac0: 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20  *   NORMAL      
9ad0: 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20    2             
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a              1.**
9af0: 20 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20     FULL         
9b00: 20 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20   3              
9b10: 20 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20             2.** 
9b20: 20 20 45 58 54 52 41 20 20 20 20 20 20 20 20 20    EXTRA         
9b30: 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  4               
9b40: 20 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a            3.**.*
9b50: 2a 20 54 68 65 20 22 50 52 41 47 4d 41 20 73 79  * The "PRAGMA sy
9b60: 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65  nchronous" state
9b70: 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74  ment also uses t
9b80: 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75  he zero-based nu
9b90: 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68  mbers..** In oth
9ba0: 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65  er words, the ze
9bb0: 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73  ro-based numbers
9bc0: 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c   are used for al
9bd0: 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72  l external inter
9be0: 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65  faces.** and the
9bf0: 20 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65   one-based value
9c00: 73 20 61 72 65 20 75 73 65 64 20 69 6e 74 65 72  s are used inter
9c10: 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65  nally..*/.#ifnde
9c20: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
9c30: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64  _SYNCHRONOUS.# d
9c40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
9c50: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9c60: 20 32 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   2.#endif.#ifnde
9c70: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
9c80: 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  _WAL_SYNCHRONOUS
9c90: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9ca0: 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e  _DEFAULT_WAL_SYN
9cb0: 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f  CHRONOUS SQLITE_
9cc0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9cd0: 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  OUS.#endif../*.*
9ce0: 2a 20 53 74 61 74 65 20 6f 66 20 61 20 73 69 6d  * State of a sim
9cf0: 70 6c 65 20 50 52 4e 47 20 75 73 65 64 20 66 6f  ple PRNG used fo
9d00: 72 20 74 68 65 20 70 65 72 2d 63 6f 6e 6e 65 63  r the per-connec
9d10: 74 69 6f 6e 20 61 6e 64 20 70 65 72 2d 70 61 67  tion and per-pag
9d20: 65 72 0a 2a 2a 20 70 73 65 75 64 6f 2d 72 61 6e  er.** pseudo-ran
9d30: 64 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72  dom number gener
9d40: 61 74 6f 72 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  ators..*/.struct
9d50: 20 46 61 73 74 50 72 6e 67 20 7b 0a 20 20 75 6e   FastPrng {.  un
9d60: 73 69 67 6e 65 64 20 69 6e 74 20 78 2c 20 79 3b  signed int x, y;
9d70: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
9d80: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
9d90: 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20   be accessed by 
9da0: 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e  the system is an
9db0: 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
9dc0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
9dd0: 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20  ructure.  There 
9de0: 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f  are normally two
9df0: 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74   of these struct
9e00: 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73  ures.** in the s
9e10: 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61  qlite.aDb[] arra
9e20: 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68  y.  aDb[0] is th
9e30: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
9e40: 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b  file and.** aDb[
9e50: 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61  1] is the databa
9e60: 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
9e70: 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74  hold temporary t
9e80: 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e  ables.  Addition
9e90: 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20  al.** databases 
9ea0: 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e  may be attached.
9eb0: 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a  .*/.struct Db {.
9ec0: 20 20 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65    char *zDbSName
9ed0: 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
9ee0: 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65 2e  f this database.
9ef0: 20 28 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e   (schema name, n
9f00: 6f 74 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a  ot filename) */.
9f10: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
9f20: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
9f30: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
9f40: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
9f50: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
9f60: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
9f70: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
9f80: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
9f90: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75  a to disk */.  u
9fa0: 38 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20  8 bSyncSet;     
9fb0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22      /* True if "
9fc0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
9fd0: 75 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72  us=N" has been r
9fe0: 75 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  un */.  Schema *
9ff0: 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
a000: 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62  Pointer to datab
a010: 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73  ase schema (poss
a020: 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a  ibly shared) */.
a030: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
a040: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
a050: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
a060: 20 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61   stores a databa
a070: 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  se schema..**.**
a080: 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a   Most Schema obj
a090: 65 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61  ects are associa
a0a0: 74 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65  ted with a Btree
a0b0: 2e 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e  .  The exception
a0c0: 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d   is.** the Schem
a0d0: 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64  a for the TEMP d
a0e0: 61 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33  atabaes (sqlite3
a0f0: 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69  .aDb[1]) which i
a100: 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e  s free-standing.
a110: 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61  .** In shared ca
a120: 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67  che mode, a sing
a130: 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  le Schema object
a140: 20 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62   can be shared b
a150: 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74  y multiple.** Bt
a160: 72 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20  rees that refer 
a170: 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65  to the same unde
a180: 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20  rlying BtShared 
a190: 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63  object..**.** Sc
a1a0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
a1b0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
a1c0: 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20  eallocated when 
a1d0: 74 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74  the last Btree t
a1e0: 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  hat.** reference
a1f0: 73 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f  s them is destro
a200: 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20  yed.   The TEMP 
a210: 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c  Schema is manual
a220: 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73  ly freed by.** s
a230: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a  qlite3_close()..
a240: 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75  *.** A thread mu
a250: 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20  st be holding a 
a260: 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72  mutex on the cor
a270: 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65  responding Btree
a280: 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20   in order.** to 
a290: 61 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f  access Schema co
a2a0: 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70  ntent.  This imp
a2b0: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68  lies that the th
a2c0: 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62  read must also b
a2d0: 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d  e.** holding a m
a2e0: 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69  utex on the sqli
a2f0: 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  te3 connection p
a300: 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73  ointer that owns
a310: 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46   the Btree..** F
a320: 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61  or a TEMP Schema
a330: 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65  , only the conne
a340: 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72  ction mutex is r
a350: 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75  equired..*/.stru
a360: 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e  ct Schema {.  in
a370: 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b  t schema_cookie;
a380: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73     /* Database s
a390: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75  chema version nu
a3a0: 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69  mber for this fi
a3b0: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e  le */.  int iGen
a3c0: 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20  eration;     /* 
a3d0: 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  Generation count
a3e0: 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64  er.  Incremented
a3f0: 20 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67   with each chang
a400: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48  e */.  Hash tblH
a410: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
a420: 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65  ll tables indexe
a430: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a440: 61 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20  ash idxHash;    
a450: 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65      /* All (name
a460: 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78  d) indices index
a470: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
a480: 48 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20  Hash trigHash;  
a490: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67       /* All trig
a4a0: 67 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20  gers indexed by 
a4b0: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66  name */.  Hash f
a4c0: 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f  keyHash;       /
a4d0: 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  * All foreign ke
a4e0: 79 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64  ys by referenced
a4f0: 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
a500: 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b   Table *pSeqTab;
a510: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c        /* The sql
a520: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
a530: 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49  le used by AUTOI
a540: 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38  NCREMENT */.  u8
a550: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
a560: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72     /* Schema for
a570: 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20  mat version for 
a580: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75  this file */.  u
a590: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
a5a0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
a5b0: 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69  ding used by thi
a5c0: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
a5d0: 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b  u16 schemaFlags;
a5e0: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73       /* Flags as
a5f0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
a600: 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
a610: 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20  nt cache_size;  
a620: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a630: 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e   pages to use in
a640: 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b   the cache */.};
a650: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
a660: 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
a670: 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
a680: 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
a690: 74 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d  the.** Db.pSchem
a6a0: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
a6b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  */.#define DbHas
a6c0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a6d0: 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49      (((D)->aDb[I
a6e0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
a6f0: 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  aFlags&(P))==(P)
a700: 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41  ).#define DbHasA
a710: 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  nyProperty(D,I,P
a720: 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d  )  (((D)->aDb[I]
a730: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a740: 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  Flags&(P))!=0).#
a750: 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70  define DbSetProp
a760: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
a770: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
a780: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
a790: 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62  |=(P).#define Db
a7a0: 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c  ClearProperty(D,
a7b0: 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b  I,P)   (D)->aDb[
a7c0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
a7d0: 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  maFlags&=~(P)../
a7e0: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
a7f0: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
a800: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
a810: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
a820: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
a830: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
a840: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
a850: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
a860: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
a870: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
a880: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
a890: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
a8a0: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
a8b0: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
a8c0: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
a8d0: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
a8e0: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
a8f0: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
a900: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
a910: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
a920: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
a930: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
a940: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
a950: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
a960: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
a970: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
a980: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
a990: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
a9a0: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
a9b0: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
a9c0: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
a9d0: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
a9e0: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
a9f0: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
aa00: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
aa10: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
aa20: 74 65 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tes) */.#define 
aa30: 44 42 5f 52 65 73 65 74 57 61 6e 74 65 64 20 20  DB_ResetWanted  
aa40: 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 52 65     0x0008  /* Re
aa50: 73 65 74 20 74 68 65 20 73 63 68 65 6d 61 20 77  set the schema w
aa60: 68 65 6e 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d  hen nSchemaLock=
aa70: 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  =0 */../*.** The
aa80: 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65   number of diffe
aa90: 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68  rent kinds of th
aaa0: 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65  ings that can be
aab0: 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e   limited.** usin
aac0: 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69  g the sqlite3_li
aad0: 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e  mit() interface.
aae0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
aaf0: 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49  TE_N_LIMIT (SQLI
ab00: 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f  TE_LIMIT_WORKER_
ab10: 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a  THREADS+1)../*.*
ab20: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
ab30: 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66  oc is a set of f
ab40: 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72  ixed-size buffer
ab50: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  s that can be us
ab60: 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79  ed.** to satisfy
ab70: 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74   small transient
ab80: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
ab90: 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20  on requests for 
aba0: 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63  objects.** assoc
abb0: 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72  iated with a par
abc0: 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
abd0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68   connection.  Th
abe0: 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b  e use of.** look
abf0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f  aside malloc pro
ac00: 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63  vides a signific
ac10: 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ant performance 
ac20: 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28  enhancement.** (
ac30: 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61  approx 10%) by a
ac40: 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73  voiding numerous
ac50: 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71   malloc/free req
ac60: 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73  uests while pars
ac70: 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65  ing.** SQL state
ac80: 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ments..**.** The
ac90: 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63   Lookaside struc
aca0: 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69  ture holds confi
acb0: 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  guration informa
acc0: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a  tion about the.*
acd0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
ace0: 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45  oc subsystem.  E
acf0: 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65  ach available me
ad00: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
ad10: 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73  in.** the lookas
ad20: 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73  ide subsystem is
ad30: 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e   stored on a lin
ad40: 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b  ked list of Look
ad50: 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a  asideSlot.** obj
ad60: 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b  ects..**.** Look
ad70: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
ad80: 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77  s are only allow
ad90: 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74  ed for objects t
ada0: 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74  hat are associat
adb0: 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72  ed.** with a par
adc0: 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
add0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65   connection.  He
ade0: 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f  nce, schema info
adf0: 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a  rmation cannot.*
ae00: 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c  * be stored in l
ae10: 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65  ookaside because
ae20: 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   in shared cache
ae30: 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61   mode the schema
ae40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
ae50: 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  is shared by mul
ae60: 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63  tiple database c
ae70: 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65  onnections.  The
ae80: 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61  refore, while pa
ae90: 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20  rsing.** schema 
aea0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
aeb0: 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62   Lookaside.bEnab
aec0: 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61  led flag is clea
aed0: 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c  red so that.** l
aee0: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
aef0: 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65  ions are not use
af00: 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74  d to construct t
af10: 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  he schema object
af20: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f  s..*/.struct Loo
af30: 6b 61 73 69 64 65 20 7b 0a 20 20 75 33 32 20 62  kaside {.  u32 b
af40: 44 69 73 61 62 6c 65 3b 20 20 20 20 20 20 20 20  Disable;        
af50: 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61     /* Only opera
af60: 74 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  te the lookaside
af70: 20 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20   when zero */.  
af80: 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20  u16 sz;         
af90: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
afa0: 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20 69  of each buffer i
afb0: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20  n bytes */.  u8 
afc0: 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20  bMalloced;      
afd0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
afe0: 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20  pStart obtained 
aff0: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  from sqlite3_mal
b000: 6c 6f 63 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e  loc() */.  u32 n
b010: 53 6c 6f 74 3b 20 20 20 20 20 20 20 20 20 20 20  Slot;           
b020: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b030: 6c 6f 6f 6b 61 73 69 64 65 20 73 6c 6f 74 73 20  lookaside slots 
b040: 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75  allocated */.  u
b050: 33 32 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20  32 anStat[3];   
b060: 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74         /* 0: hit
b070: 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73  s.  1: size miss
b080: 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73  es.  2: full mis
b090: 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69  ses */.  Lookasi
b0a0: 64 65 53 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20  deSlot *pInit;  
b0b0: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 62 75 66 66   /* List of buff
b0c0: 65 72 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  ers not previous
b0d0: 6c 79 20 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f  ly used */.  Loo
b0e0: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65  kasideSlot *pFre
b0f0: 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  e;   /* List of 
b100: 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72  available buffer
b110: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74  s */.  void *pSt
b120: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
b130: 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20  * First byte of 
b140: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
b150: 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64   space */.  void
b160: 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
b170: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
b180: 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76  e past end of av
b190: 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f  ailable space */
b1a0: 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .};.struct Looka
b1b0: 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f  sideSlot {.  Loo
b1c0: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78  kasideSlot *pNex
b1d0: 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75  t;    /* Next bu
b1e0: 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74  ffer in the list
b1f0: 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73   of free buffers
b200: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
b210: 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 62  hash table for b
b220: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
b230: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28   definitions.  (
b240: 41 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  Application-defi
b250: 6e 65 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ned.** functions
b260: 20 75 73 65 20 61 20 72 65 67 75 6c 61 72 20 74   use a regular t
b270: 61 62 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d 20  able table from 
b280: 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48  hash.h.).**.** H
b290: 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66  ash each FuncDef
b2a0: 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20   structure into 
b2b0: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
b2c0: 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73  efHash.a[] slots
b2d0: 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20  ..** Collisions 
b2e0: 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44  are on the FuncD
b2f0: 65 66 2e 75 2e 70 48 61 73 68 20 63 68 61 69 6e  ef.u.pHash chain
b300: 2e 20 20 55 73 65 20 74 68 65 20 53 51 4c 49 54  .  Use the SQLIT
b310: 45 5f 46 55 4e 43 5f 48 41 53 48 28 29 0a 2a 2a  E_FUNC_HASH().**
b320: 20 6d 61 63 72 6f 20 74 6f 20 63 6f 6d 70 75 74   macro to comput
b330: 65 20 61 20 68 61 73 68 20 6f 6e 20 74 68 65 20  e a hash on the 
b340: 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 2e 0a 2a  function name..*
b350: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b360: 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33  _FUNC_HASH_SZ 23
b370: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48  .struct FuncDefH
b380: 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20  ash {.  FuncDef 
b390: 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48  *a[SQLITE_FUNC_H
b3a0: 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f  ASH_SZ];       /
b3b0: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72  * Hash table for
b3c0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b   functions */.};
b3d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b3e0: 46 55 4e 43 5f 48 41 53 48 28 43 2c 4c 29 20 28  FUNC_HASH(C,L) (
b3f0: 28 28 43 29 2b 28 4c 29 29 25 53 51 4c 49 54 45  ((C)+(L))%SQLITE
b400: 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 29 0a 0a  _FUNC_HASH_SZ)..
b410: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
b420: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
b430: 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74  N./*.** Informat
b440: 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20  ion held in the 
b450: 22 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61  "sqlite3" databa
b460: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  se connection ob
b470: 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a  ject and used.**
b480: 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20   to manage user 
b490: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a  authentication..
b4a0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
b4b0: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
b4c0: 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  th sqlite3_usera
b4d0: 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69  uth;.struct sqli
b4e0: 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20  te3_userauth {. 
b4f0: 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20   u8 authLevel;  
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b510: 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e  * Current authen
b520: 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a  tication level *
b530: 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b  /.  int nAuthPW;
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
b560: 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65   zAuthPW in byte
b570: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  s */.  char *zAu
b580: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b590: 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64       /* Password
b5a0: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
b5b0: 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20  icate */.  char 
b5c0: 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20  *zAuthUser;     
b5d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72           /* User
b5e0: 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75   name used to au
b5f0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b  thenticate */.};
b600: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
b610: 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f  ues for sqlite3_
b620: 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76  userauth.authLev
b630: 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  el */.#define UA
b640: 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20  UTH_Unknown     
b650: 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  0     /* Authent
b660: 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20  ication not yet 
b670: 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69  checked */.#defi
b680: 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20  ne UAUTH_Fail   
b690: 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73       1     /* Us
b6a0: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
b6b0: 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66  n failed */.#def
b6c0: 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20  ine UAUTH_User  
b6d0: 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41        2     /* A
b6e0: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
b6f0: 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f  a normal user */
b700: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41  .#define UAUTH_A
b710: 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20  dmin       3    
b720: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b730: 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74  d as an administ
b740: 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e  rator */../* Fun
b750: 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79  ctions used only
b760: 20 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69   by user authori
b770: 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a  zation logic */.
b780: 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41  int sqlite3UserA
b790: 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63  uthTable(const c
b7a0: 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
b7b0: 65 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c  e3UserAuthCheckL
b7c0: 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ogin(sqlite3*,co
b7d0: 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a  nst char*,u8*);.
b7e0: 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72  void sqlite3User
b7f0: 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33  AuthInit(sqlite3
b800: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
b810: 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65  CryptFunc(sqlite
b820: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
b830: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
b840: 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
b850: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b860: 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  CATION */../*.**
b870: 20 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65   typedef for the
b880: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63   authorization c
b890: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
b8a0: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
b8b0: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b8c0: 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66  CATION.  typedef
b8d0: 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78   int (*sqlite3_x
b8e0: 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  auth)(void*,int,
b8f0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b900: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b910: 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ar*,.           
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b930: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
b940: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b950: 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69  else.  typedef i
b960: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
b970: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
b980: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b990: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b9a0: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9c0: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a    const char*);.
b9d0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
b9e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
b9f0: 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69  ECATED./* This i
ba00: 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54  s an extra SQLIT
ba10: 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68  E_TRACE macro th
ba20: 61 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65  at indicates "le
ba30: 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a  gacy" tracing.**
ba40: 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66   in the style of
ba50: 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
ba60: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
ba70: 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20  TE_TRACE_LEGACY 
ba80: 20 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20           0x40   
ba90: 20 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67    /* Use the leg
baa0: 61 63 79 20 78 54 72 61 63 65 20 2a 2f 0a 23 64  acy xTrace */.#d
bab0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
bac0: 43 45 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20  CE_XPROFILE     
bad0: 20 20 20 30 78 38 30 20 20 20 20 20 2f 2a 20 55     0x80     /* U
bae0: 73 65 20 74 68 65 20 6c 65 67 61 63 79 20 78 50  se the legacy xP
baf0: 72 6f 66 69 6c 65 20 2a 2f 0a 23 65 6c 73 65 0a  rofile */.#else.
bb00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
bb10: 52 41 43 45 5f 4c 45 47 41 43 59 20 20 20 20 20  RACE_LEGACY     
bb20: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
bb30: 51 4c 49 54 45 5f 54 52 41 43 45 5f 58 50 52 4f  QLITE_TRACE_XPRO
bb40: 46 49 4c 45 20 20 20 20 20 20 20 20 30 0a 23 65  FILE        0.#e
bb50: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
bb60: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
bb70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bb80: 5f 54 52 41 43 45 5f 4e 4f 4e 4c 45 47 41 43 59  _TRACE_NONLEGACY
bb90: 5f 4d 41 53 4b 20 20 30 78 30 66 20 20 20 20 20  _MASK  0x0f     
bba0: 2f 2a 20 4e 6f 72 6d 61 6c 20 66 6c 61 67 73 20  /* Normal flags 
bbb0: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  */.../*.** Each 
bbc0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
bbd0: 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ion is an instan
bbe0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
bbf0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
bc00: 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  /.struct sqlite3
bc10: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73   {.  sqlite3_vfs
bc20: 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20   *pVfs;         
bc30: 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61     /* OS Interfa
bc40: 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56  ce */.  struct V
bc50: 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
bc60: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
bc70: 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20   active virtual 
bc80: 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f  machines */.  Co
bc90: 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c  llSeq *pDfltColl
bca0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
bcb0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
bcc0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42  ting sequence (B
bcd0: 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69  INARY) */.  sqli
bce0: 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78  te3_mutex *mutex
bcf0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
bd00: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f  nection mutex */
bd10: 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20  .  Db *aDb;     
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd30: 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73   /* All backends
bd40: 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20   */.  int nDb;  
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd60: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
bd70: 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e   backends curren
bd80: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20  tly in use */.  
bd90: 75 33 32 20 6d 44 62 46 6c 61 67 73 3b 20 20 20  u32 mDbFlags;   
bda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bdb0: 20 66 6c 61 67 73 20 72 65 63 6f 72 64 69 6e 67   flags recording
bdc0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 65 20   internal state 
bdd0: 2a 2f 0a 20 20 75 36 34 20 66 6c 61 67 73 3b 20  */.  u64 flags; 
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdf0: 20 20 20 2f 2a 20 66 6c 61 67 73 20 73 65 74 74     /* flags sett
be00: 61 62 6c 65 20 62 79 20 70 72 61 67 6d 61 73 2e  able by pragmas.
be10: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
be20: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
be40: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
be50: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
be60: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
be70: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
be80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
be90: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
bea0: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33   setting */.  u3
beb0: 32 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20  2 nSchemaLock;  
bec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
bed0: 6f 20 6e 6f 74 20 72 65 73 65 74 20 74 68 65 20  o not reset the 
bee0: 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d  schema when non-
bef0: 7a 65 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  zero */.  unsign
bf00: 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73  ed int openFlags
bf10: 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  ;       /* Flags
bf20: 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74   passed to sqlit
bf30: 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a  e3_vfs.xOpen() *
bf40: 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b  /.  int errCode;
bf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf60: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
bf70: 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c   error code (SQL
bf80: 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20  ITE_*) */.  int 
bf90: 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20  errMask;        
bfa0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72            /* & r
bfb0: 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68  esult codes with
bfc0: 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74   this before ret
bfd0: 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  urning */.  int 
bfe0: 69 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20  iSysErrno;      
bff0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
c000: 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61  no value from la
c010: 73 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20  st system error 
c020: 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c  */.  u16 dbOptFl
c030: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
c040: 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65     /* Flags to e
c050: 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70  nable/disable op
c060: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20  timizations */. 
c070: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c090: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
c0a0: 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d  */.  u8 autoComm
c0b0: 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
c0c0: 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63     /* The auto-c
c0d0: 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20  ommit flag. */. 
c0e0: 20 75 38 20 62 43 6f 6e 63 75 72 72 65 6e 74 3b   u8 bConcurrent;
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c100: 2a 20 43 75 72 72 65 6e 74 20 74 72 61 6e 73 61  * Current transa
c110: 63 74 69 6f 6e 20 69 73 20 22 43 4f 4e 43 55 52  ction is "CONCUR
c120: 52 45 4e 54 22 20 2a 2f 0a 20 20 75 38 20 74 65  RENT" */.  u8 te
c130: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
c140: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66           /* 1: f
c150: 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a  ile 2: memory 0:
c160: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
c170: 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
c180: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
c190: 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73  rue if we have s
c1a0: 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69  een a malloc fai
c1b0: 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42 65  lure */.  u8 bBe
c1c0: 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20  nignMalloc;     
c1d0: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
c1e0: 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20 69  t require OOMs i
c1f0: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 64  f true */.  u8 d
c200: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
c210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
c220: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
c230: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
c240: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
c250: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
c260: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
c270: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
c280: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
c290: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
c2a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c2b0: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
c2c0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
c2d0: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
c2e0: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
c2f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
c300: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
c310: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
c320: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
c330: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
c340: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
c350: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
c360: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
c370: 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54 72  a TS */.  u8 mTr
c380: 61 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ace;            
c390: 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f 20          /* zero 
c3a0: 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f 54  or more SQLITE_T
c3b0: 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20 20  RACE flags */.  
c3c0: 75 38 20 6e 6f 53 68 61 72 65 64 43 61 63 68 65  u8 noSharedCache
c3d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
c3e0: 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61 72   True if no shar
c3f0: 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e 64  ed-cache backend
c400: 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45 78  s */.  u8 nSqlEx
c410: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
c420: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c430: 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71 6c  f pending OP_Sql
c440: 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  Exec opcodes */.
c450: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
c460: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
c470: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
c480: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
c490: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4b0: 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65    /* Magic numbe
c4c0: 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62  r for detect lib
c4d0: 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20  rary misuse */. 
c4e0: 20 46 61 73 74 50 72 6e 67 20 73 50 72 6e 67 3b   FastPrng sPrng;
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c500: 2a 20 53 74 61 74 65 20 6f 66 20 74 68 65 20 70  * State of the p
c510: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 50 52  er-connection PR
c520: 4e 47 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  NG */.  int nCha
c530: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
c540: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
c550: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
c560: 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  e3_changes() */.
c570: 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e    int nTotalChan
c580: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
c590: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
c5a0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74  d by sqlite3_tot
c5b0: 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  al_changes() */.
c5c0: 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c    int aLimit[SQL
c5d0: 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20  ITE_N_LIMIT];   
c5e0: 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69  /* Limits */.  i
c5f0: 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61  nt nMaxSorterMma
c600: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
c610: 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  Maximum size of 
c620: 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62  regions mapped b
c630: 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74  y sorter */.  st
c640: 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74  ruct sqlite3Init
c650: 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49  Info {      /* I
c660: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
c670: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
c680: 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
c690: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
c6a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
c6b0: 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65  page of table be
c6c0: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
c6d0: 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20  */.    u8 iDb;  
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6f0: 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66     /* Which db f
c700: 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69  ile is being ini
c710: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
c720: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
c730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
c740: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
c750: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
c760: 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6f 72  .    unsigned or
c770: 70 68 61 6e 54 72 69 67 67 65 72 20 3a 20 31 3b  phanTrigger : 1;
c780: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
c790: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
c7a0: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
c7b0: 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f     unsigned impo
c7c0: 73 74 65 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f  sterTable : 1; /
c7d0: 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d  * Building an im
c7e0: 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a  poster table */.
c7f0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 6f      unsigned reo
c800: 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20  penMemdb : 1;   
c810: 2f 2a 20 41 54 54 41 43 48 20 69 73 20 72 65 61  /* ATTACH is rea
c820: 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20 75 73 69  lly a reopen usi
c830: 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d 20  ng MemDB */.  } 
c840: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
c850: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
c860: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c870: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
c880: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
c890: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c8b0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c8c0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c8d0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
c8e0: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c900: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c910: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c920: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
c930: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
c940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c950: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
c960: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
c970: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
c980: 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20  nVDestroy;      
c990: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c9a0: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50  ber of active OP
c9b0: 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  _VDestroy operat
c9c0: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ions */.  int nE
c9d0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
c9e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c9f0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
ca00: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
ca10: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
ca20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
ca30: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
ca40: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
ca50: 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28    int (*xTrace)(
ca60: 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c  u32,void*,void*,
ca70: 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54  void*);     /* T
ca80: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
ca90: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
caa0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cac0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
cad0: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
cae0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
caf0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
cb00: 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69  .  void (*xProfi
cb10: 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  le)(void*,const 
cb20: 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20  char*,u64);  /* 
cb30: 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69  Profiling functi
cb40: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  on */.  void *pP
cb50: 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20  rofileArg;      
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb70: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
cb80: 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f   profile functio
cb90: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 76 6f  n */.#endif.  vo
cba0: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbc0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
cbd0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
cbe0: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d   */.  int (*xCom
cbf0: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
cc00: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
cc10: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
cc20: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
cc30: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
cc40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
cc50: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
cc60: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
cc70: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
cc80: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
cc90: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
cca0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
ccb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
ccc0: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
ccd0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
cce0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
ccf0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
cd00: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
cd10: 34 29 3b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  4);.  Parse *pPa
cd20: 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
cd30: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 70      /* Current p
cd40: 61 72 73 65 20 2a 2f 0a 23 69 66 64 65 66 20 53  arse */.#ifdef S
cd50: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
cd60: 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f  UPDATE_HOOK.  vo
cd70: 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72  id *pPreUpdateAr
cd80: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  g;          /* F
cd90: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
cda0: 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62   xPreUpdateCallb
cdb0: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ack */.  void (*
cdc0: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
cdd0: 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74  ck)(   /* Regist
cde0: 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ered using sqlit
cdf0: 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f  e3_preupdate_hoo
ce00: 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a  k() */.    void*
ce10: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68  ,sqlite3*,int,ch
ce20: 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63  ar const*,char c
ce30: 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e  onst*,sqlite3_in
ce40: 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  t64,sqlite3_int6
ce50: 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61  4.  );.  PreUpda
ce60: 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20  te *pPreUpdate; 
ce70: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
ce80: 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65  t for active pre
ce90: 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b  -update callback
cea0: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
ceb0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
cec0: 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69  PDATE_HOOK */.#i
ced0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
cee0: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
cef0: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
cf00: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
cf10: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
cf20: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
cf30: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
cf40: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
cf50: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
cf60: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
cf70: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
cf80: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
cf90: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
cfa0: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
cfb0: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
cfc0: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
cfd0: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
cfe0: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
cff0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
d000: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
d010: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
d020: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73   volatile int is
d030: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20  Interrupted; /* 
d040: 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f  True if sqlite3_
d050: 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65  interrupt has be
d060: 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20  en called */.   
d070: 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31   double notUsed1
d080: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
d090: 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31  Spacer */.  } u1
d0a0: 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f  ;.  Lookaside lo
d0b0: 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
d0c0: 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d    /* Lookaside m
d0d0: 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74  alloc configurat
d0e0: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
d0f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
d100: 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  RIZATION.  sqlit
d110: 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20  e3_xauth xAuth; 
d120: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
d130: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
d140: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
d150: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
d160: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d170: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
d180: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
d190: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
d1a0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d1b0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
d1c0: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
d1d0: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
d1e0: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
d1f0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
d200: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
d210: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
d220: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
d230: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
d240: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75   callback */.  u
d250: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
d260: 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  sOps;        /* 
d270: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
d280: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
d290: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
d2a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
d2b0: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
d2c0: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
d2d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d2e0: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
d2f0: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
d300: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
d310: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d320: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
d330: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
d340: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
d350: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
d360: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
d370: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
d380: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
d390: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
d3a0: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
d3b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
d3c0: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
d3d0: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
d3e0: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
d3f0: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
d400: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e         /* Discon
d410: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
d420: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
d430: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
d440: 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20   Hash aFunc;    
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d460: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
d470: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
d480: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
d490: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
d4a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
d4b0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d4c0: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
d4d0: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
d4e0: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
d4f0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
d500: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
d510: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
d520: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
d530: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
d540: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
d550: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
d560: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
d570: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
d580: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
d590: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
d5a0: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
d5b0: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
d5c0: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
d5d0: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
d5e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d5f0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
d600: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
d610: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
d620: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
d630: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d640: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
d650: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
d660: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
d670: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
d680: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
d690: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
d6a0: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
d6b0: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
d6c0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
d6d0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d6e0: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
d6f0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d700: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
d710: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
d720: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
d730: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
d740: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
d750: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
d760: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
d770: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
d780: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
d790: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
d7a0: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
d7b0: 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  STER.  ** mutex,
d7c0: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
d7d0: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
d7e0: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
d7f0: 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20  notify.c..  **. 
d800: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
d810: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
d820: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
d830: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
d840: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
d850: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
d860: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
d870: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
d880: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
d890: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d8a0: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
d8b0: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
d8c0: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
d8d0: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
d8e0: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
d8f0: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
d900: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
d910: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
d920: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
d930: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
d940: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
d950: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
d960: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
d970: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
d980: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
d990: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
d9a0: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
d9b0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
d9c0: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
d9d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
d9e0: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
d9f0: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
da00: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
da10: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
da20: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
da30: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
da40: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
da50: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
da60: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
da70: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
da80: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
da90: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
daa0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
dab0: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
dac0: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
dad0: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
dae0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
daf0: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
db00: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
db10: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
db20: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
db30: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
db40: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
db50: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
db60: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
db70: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
db80: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
db90: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
dba0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
dbb0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
dbc0: 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  gs..**.** Value 
dbd0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
dbe0: 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
dbf0: 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c  ()):.**      SQL
dc00: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
dc10: 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46    == PAGER_FULLF
dc20: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
dc30: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
dc40: 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f  c == PAGER_CKPT_
dc50: 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20  FULLFSYNC.**    
dc60: 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70    SQLITE_CacheSp
dc70: 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f  ill    == PAGER_
dc80: 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23  CACHE_SPILL.*/.#
dc90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
dca0: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
dcb0: 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74  0000001  /* OK t
dcc0: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
dcd0: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
dce0: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
dcf0: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30 30  ileFmt  0x000000
dd00: 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  02  /* Create ne
dd10: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
dd20: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
dd30: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
dd40: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
dd50: 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  004  /* Show ful
dd60: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
dd70: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
dd80: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
dd90: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30  Sync      0x0000
dda0: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
ddb0: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
ddc0: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
ddd0: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
dde0: 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30  lFSync  0x000000
ddf0: 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  10  /* Use full 
de00: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
de10: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
de20: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
de30: 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32 30  l     0x00000020
de40: 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c    /* OK to spill
de50: 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a   pager cache */.
de60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
de70: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
de80: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
de90: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
dea0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
deb0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
dec0: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
ded0: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
dee0: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
def0: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df20: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
df30: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
df40: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
df50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
df80: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
df90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dfa0: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
dfb0: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
dfc0: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
dfd0: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
dfe0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e010: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
e020: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
e030: 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43  e SQLITE_IgnoreC
e040: 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30 32  hecks   0x000002
e050: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e  00  /* Do not en
e060: 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73  force check cons
e070: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
e080: 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  ne SQLITE_ReadUn
e090: 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30  commit   0x00000
e0a0: 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43  400  /* READ UNC
e0b0: 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72  OMMITTED in shar
e0c0: 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  ed-cache */.#def
e0d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70  ine SQLITE_NoCkp
e0e0: 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30  tOnClose  0x0000
e0f0: 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63  0800  /* No chec
e100: 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28  kpoint on close(
e110: 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66  )/DETACH */.#def
e120: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
e130: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 30  seOrder   0x0000
e140: 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  1000  /* Reverse
e150: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
e160: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
e170: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
e180: 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20      0x00002000  
e190: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
e1a0: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
e1b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e1c0: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
e1d0: 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66  00004000  /* Enf
e1e0: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
e1f0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
e200: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e210: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
e220: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e  x00008000  /* En
e230: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
e240: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
e250: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
e260: 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30  ension  0x000100
e270: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
e280: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
e290: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
e2a0: 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30 78  oadExtFunc    0x
e2b0: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61  00020000  /* Ena
e2c0: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
e2d0: 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f  on() SQL func */
e2e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e2f0: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
e300: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72  x00040000  /* Tr
e310: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
e320: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
e330: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
e340: 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30 30         0x0008000
e350: 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20  0  /* Defer all 
e360: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  FK constraints *
e370: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e380: 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20  _QueryOnly      
e390: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44  0x00100000  /* D
e3a0: 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  isable database 
e3b0: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e3c0: 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69  ne SQLITE_CellSi
e3d0: 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30 30  zeCk     0x00200
e3e0: 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74  000  /* Check bt
e3f0: 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f  ree cell sizes o
e400: 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e  n load */.#defin
e410: 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b  e SQLITE_Fts3Tok
e420: 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30 30  enizer  0x004000
e430: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74  00  /* Enable ft
e440: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20  s3_tokenizer(2) 
e450: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e460: 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20  E_EnableQPSG    
e470: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
e480: 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74  Query Planner St
e490: 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65  ability Guarante
e4a0: 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  e*/.#define SQLI
e4b0: 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20 20  TE_TriggerEQP   
e4c0: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
e4d0: 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45 58   Show trigger EX
e4e0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e4f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e500: 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73 65  TE_ResetDatabase
e510: 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a    0x02000000  /*
e520: 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61 62   Reset the datab
e530: 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ase */.#define S
e540: 51 4c 49 54 45 5f 4c 65 67 61 63 79 41 6c 74 65  QLITE_LegacyAlte
e550: 72 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20  r    0x04000000 
e560: 20 2f 2a 20 4c 65 67 61 63 79 20 41 4c 54 45 52   /* Legacy ALTER
e570: 20 54 41 42 4c 45 20 62 65 68 61 76 69 6f 75 72   TABLE behaviour
e580: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e590: 54 45 5f 4e 6f 53 63 68 65 6d 61 45 72 72 6f 72  TE_NoSchemaError
e5a0: 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a    0x08000000  /*
e5b0: 20 44 6f 20 6e 6f 74 20 72 65 70 6f 72 74 20 73   Do not report s
e5c0: 63 68 65 6d 61 20 70 61 72 73 65 20 65 72 72 6f  chema parse erro
e5d0: 72 73 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  rs*/.#define SQL
e5e0: 49 54 45 5f 44 65 66 65 6e 73 69 76 65 20 20 20  ITE_Defensive   
e5f0: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
e600: 2a 20 49 6e 70 75 74 20 53 51 4c 20 69 73 20 6c  * Input SQL is l
e610: 69 6b 65 6c 79 20 68 6f 73 74 69 6c 65 20 2a 2f  ikely hostile */
e620: 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ..#define SQLITE
e630: 5f 4e 6f 6f 70 55 70 64 61 74 65 20 20 20 20 20  _NoopUpdate     
e640: 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 55  0x01000000  /* U
e650: 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 73  PDATE operations
e660: 20 61 72 65 20 6e 6f 2d 6f 70 73 20 2a 2f 0a 2f   are no-ops */./
e670: 2a 20 46 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c  * Flags used onl
e680: 79 20 69 66 20 64 65 62 75 67 67 69 6e 67 20 2a  y if debugging *
e690: 2f 0a 23 64 65 66 69 6e 65 20 48 49 28 58 29 20  /.#define HI(X) 
e6a0: 20 28 28 75 36 34 29 28 58 29 3c 3c 33 32 29 0a   ((u64)(X)<<32).
e6b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
e6c0: 42 55 47 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  BUG.#define SQLI
e6d0: 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20  TE_SqlTrace     
e6e0: 20 20 48 49 28 30 78 30 30 30 31 29 20 20 2f 2a    HI(0x0001)  /*
e6f0: 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c   Debug print SQL
e700: 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20   as it executes 
e710: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e720: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20  E_VdbeListing   
e730: 20 48 49 28 30 78 30 30 30 32 29 20 20 2f 2a 20   HI(0x0002)  /* 
e740: 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f  Debug listings o
e750: 66 20 56 44 42 45 20 70 72 6f 67 73 20 2a 2f 0a  f VDBE progs */.
e760: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
e770: 64 62 65 54 72 61 63 65 20 20 20 20 20 20 48 49  dbeTrace      HI
e780: 28 30 78 30 30 30 34 29 20 20 2f 2a 20 54 72 75  (0x0004)  /* Tru
e790: 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20  e to trace VDBE 
e7a0: 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65  execution */.#de
e7b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
e7c0: 41 64 64 6f 70 54 72 61 63 65 20 48 49 28 30 78  AddopTrace HI(0x
e7d0: 30 30 30 38 29 20 20 2f 2a 20 54 72 61 63 65 20  0008)  /* Trace 
e7e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e7f0: 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66  () calls */.#def
e800: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45  ine SQLITE_VdbeE
e810: 51 50 20 20 20 20 20 20 20 20 48 49 28 30 78 30  QP        HI(0x0
e820: 30 31 30 29 20 20 2f 2a 20 44 65 62 75 67 20 45  010)  /* Debug E
e830: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
e840: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
e850: 49 54 45 5f 50 61 72 73 65 72 54 72 61 63 65 20  ITE_ParserTrace 
e860: 20 20 20 48 49 28 30 78 30 30 32 30 29 20 20 2f     HI(0x0020)  /
e870: 2a 20 50 52 41 47 4d 41 20 70 61 72 73 65 72 5f  * PRAGMA parser_
e880: 74 72 61 63 65 3d 4f 4e 20 2a 2f 0a 23 65 6e 64  trace=ON */.#end
e890: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  if../*.** Allowe
e8a0: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
e8b0: 69 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a 2a 2f  ite3.mDbFlags.*/
e8c0: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
e8d0: 53 63 68 65 6d 61 43 68 61 6e 67 65 20 20 20 30  SchemaChange   0
e8e0: 78 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f 6d 6d  x0001  /* Uncomm
e8f0: 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65  itted Hash table
e900: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
e910: 69 6e 65 20 44 42 46 4c 41 47 5f 50 72 65 66 65  ine DBFLAG_Prefe
e920: 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 30 32  rBuiltin  0x0002
e930: 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20    /* Preference 
e940: 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  to built-in func
e950: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46  s */.#define DBF
e960: 4c 41 47 5f 56 61 63 75 75 6d 20 20 20 20 20 20  LAG_Vacuum      
e970: 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 43 75     0x0004  /* Cu
e980: 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43  rrently in a VAC
e990: 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  UUM */.#define D
e9a0: 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e 6f 77  BFLAG_SchemaKnow
e9b0: 6e 4f 6b 20 20 30 78 30 30 30 38 20 20 2f 2a 20  nOk  0x0008  /* 
e9c0: 53 63 68 65 6d 61 20 69 73 20 6b 6e 6f 77 6e 20  Schema is known 
e9d0: 74 6f 20 62 65 20 76 61 6c 69 64 20 2a 2f 0a 0a  to be valid */..
e9e0: 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68  /*.** Bits of th
e9f0: 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46  e sqlite3.dbOptF
ea00: 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20  lags field that 
ea10: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a  are used by the.
ea20: 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
ea30: 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
ea40: 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
ea50: 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72  TIONS,...) inter
ea60: 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63  face to.** selec
ea70: 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76  tively disable v
ea80: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
ea90: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
eaa0: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
eab0: 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20  ttener 0x0001   
eac0: 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e  /* Query flatten
ead0: 69 6e 67 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ing */.         
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaf0: 20 2f 2a 20 20 30 78 30 30 30 32 20 20 20 61 76   /*  0x0002   av
eb00: 61 69 6c 61 62 6c 65 20 66 6f 72 20 72 65 75 73  ailable for reus
eb10: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
eb20: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
eb30: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
eb40: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
eb50: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
eb60: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
eb70: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
eb80: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
eb90: 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ctoring */.#defi
eba0: 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e  ne SQLITE_Distin
ebb0: 63 74 4f 70 74 20 20 20 20 30 78 30 30 31 30 20  ctOpt    0x0010 
ebc0: 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73    /* DISTINCT us
ebd0: 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  ing indexes */.#
ebe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
ebf0: 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30  verIdxScan   0x0
ec00: 30 32 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e  020   /* Coverin
ec10: 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f  g index scans */
ec20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ec30: 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30  OrderByIdxJoin 0
ec40: 78 30 30 34 30 20 20 20 2f 2a 20 4f 52 44 45 52  x0040   /* ORDER
ec50: 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61   BY of joins via
ec60: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
ec70: 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74  e SQLITE_Transit
ec80: 69 76 65 20 20 20 20 20 30 78 30 30 38 30 20 20  ive     0x0080  
ec90: 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63   /* Transitive c
eca0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
ecb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69  efine SQLITE_Omi
ecc0: 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 31  tNoopJoin   0x01
ecd0: 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75  00   /* Omit unu
ece0: 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f  sed tables in jo
ecf0: 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ins */.#define S
ed00: 51 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56 69 65  QLITE_CountOfVie
ed10: 77 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a  w    0x0200   /*
ed20: 20 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d 76 69   The count-of-vi
ed30: 65 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  ew optimization 
ed40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ed50: 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20  E_CursorHints   
ed60: 20 30 78 30 34 30 30 20 20 20 2f 2a 20 41 64 64   0x0400   /* Add
ed70: 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f   OP_CursorHint o
ed80: 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e  pcodes */.#defin
ed90: 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20  e SQLITE_Stat34 
eda0: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20          0x0800  
edb0: 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72   /* Use STAT3 or
edc0: 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 20   STAT4 data */. 
edd0: 20 20 2f 2a 20 54 48 33 20 65 78 70 65 63 74 73    /* TH3 expects
ede0: 20 74 68 65 20 53 74 61 74 33 34 20 20 5e 5e 5e   the Stat34  ^^^
edf0: 5e 5e 5e 20 76 61 6c 75 65 20 74 6f 20 62 65 20  ^^^ value to be 
ee00: 30 78 30 38 30 30 2e 20 20 44 6f 6e 27 74 20 63  0x0800.  Don't c
ee10: 68 61 6e 67 65 20 69 74 20 2a 2f 0a 23 64 65 66  hange it */.#def
ee20: 69 6e 65 20 53 51 4c 49 54 45 5f 50 75 73 68 44  ine SQLITE_PushD
ee30: 6f 77 6e 20 20 20 20 20 20 20 30 78 31 30 30 30  own       0x1000
ee40: 20 20 20 2f 2a 20 54 68 65 20 70 75 73 68 2d 64     /* The push-d
ee50: 6f 77 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  own optimization
ee60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ee70: 54 45 5f 53 69 6d 70 6c 69 66 79 4a 6f 69 6e 20  TE_SimplifyJoin 
ee80: 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20 43 6f    0x2000   /* Co
ee90: 6e 76 65 72 74 20 4c 45 46 54 20 4a 4f 49 4e 20  nvert LEFT JOIN 
eea0: 74 6f 20 4a 4f 49 4e 20 2a 2f 0a 23 64 65 66 69  to JOIN */.#defi
eeb0: 6e 65 20 53 51 4c 49 54 45 5f 53 6b 69 70 53 63  ne SQLITE_SkipSc
eec0: 61 6e 20 20 20 20 20 20 20 30 78 34 30 30 30 20  an       0x4000 
eed0: 20 20 2f 2a 20 53 6b 69 70 2d 73 63 61 6e 73 20    /* Skip-scans 
eee0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eef0: 45 5f 50 72 6f 70 61 67 61 74 65 43 6f 6e 73 74  E_PropagateConst
ef00: 20 30 78 38 30 30 30 20 20 20 2f 2a 20 54 68 65   0x8000   /* The
ef10: 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f 70 61 67   constant propag
ef20: 61 74 69 6f 6e 20 6f 70 74 20 2a 2f 0a 23 64 65  ation opt */.#de
ef30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f  fine SQLITE_AllO
ef40: 70 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66  pts        0xfff
ef50: 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d  f   /* All optim
ef60: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a  izations */../*.
ef70: 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65  ** Macros for te
ef80: 73 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  sting whether or
ef90: 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f   not optimizatio
efa0: 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f  ns are enabled o
efb0: 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  r disabled..*/.#
efc0: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
efd0: 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20  ionDisabled(db, 
efe0: 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64  mask)  (((db)->d
eff0: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
f000: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70  )!=0).#define Op
f010: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
f020: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28  d(db, mask)   ((
f030: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
f040: 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a  &(mask))==0)../*
f050: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
f060: 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74  if it OK to fact
f070: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72  or constant expr
f080: 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65  essions into the
f090: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a   initialization.
f0a0: 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67  ** code. The arg
f0b0: 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65  ument is a Parse
f0c0: 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
f0d0: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
f0e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74  */.#define Const
f0f0: 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29  FactorOk(P) ((P)
f100: 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29  ->okConstFactor)
f110: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
f120: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
f130: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65  sqlite.magic fie
f140: 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ld..** The numbe
f150: 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20  rs are obtained 
f160: 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61  at random and ha
f170: 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65  ve no special me
f180: 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20  aning, other.** 
f190: 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69  than being disti
f1a0: 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f  nct from one ano
f1b0: 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
f1c0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
f1d0: 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39  EN     0xa029a69
f1e0: 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  7  /* Database i
f1f0: 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s open */.#defin
f200: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  e SQLITE_MAGIC_C
f210: 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64  LOSED   0x9f3c2d
f220: 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  33  /* Database 
f230: 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65  is closed */.#de
f240: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
f250: 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37  C_SICK     0x4b7
f260: 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20  71290  /* Error 
f270: 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f  and awaiting clo
f280: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
f290: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
f2a0: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
f2b0: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
f2c0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
f2d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f2e0: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
f2f0: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
f300: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
f310: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
f320: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f330: 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78  AGIC_ZOMBIE   0x
f340: 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f  64cffc7f  /* Clo
f350: 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61  se with last sta
f360: 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a  tement close */.
f370: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
f380: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
f390: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
f3a0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
f3b0: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
f3c0: 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75  .  For global bu
f3d0: 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73  ilt-in functions
f3e0: 20 28 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20   (ex: substr(), 
f3f0: 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a  max(), count()).
f400: 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** a pointer to 
f410: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
f420: 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71  s held in the sq
f430: 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63  lite3BuiltinFunc
f440: 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a  tions object..**
f450: 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74   For per-connect
f460: 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d  ion application-
f470: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
f480: 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  s, a pointer to 
f490: 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
f4a0: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65  e is held in the
f4b0: 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20   db->aHash hash 
f4c0: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  table..**.** The
f4d0: 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69   u.pHash field i
f4e0: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 67 6c  s used by the gl
f4f0: 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20  obal built-ins. 
f500: 20 54 68 65 20 75 2e 70 44 65 73 74 72 75 63 74   The u.pDestruct
f510: 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75  or.** field is u
f520: 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65  sed by per-conne
f530: 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75  ction app-def fu
f540: 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75  nctions..*/.stru
f550: 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69  ct FuncDef {.  i
f560: 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  8 nArg;         
f570: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f580: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20   arguments.  -1 
f590: 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20  means unlimited 
f5a0: 2a 2f 0a 20 20 75 33 32 20 66 75 6e 63 46 6c 61  */.  u32 funcFla
f5b0: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d  gs;       /* Som
f5c0: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
f5d0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a   SQLITE_FUNC_* *
f5e0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  /.  void *pUserD
f5f0: 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72  ata;     /* User
f600: 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20   data parameter 
f610: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e  */.  FuncDef *pN
f620: 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
f630: 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  t function with 
f640: 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76  same name */.  v
f650: 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71  oid (*xSFunc)(sq
f660: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
f670: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
f680: 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20  **); /* func or 
f690: 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f  agg-step */.  vo
f6a0: 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28  id (*xFinalize)(
f6b0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f6c0: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  );              
f6d0: 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c      /* Agg final
f6e0: 69 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64 20 28  izer */.  void (
f6f0: 2a 78 56 61 6c 75 65 29 28 73 71 6c 69 74 65 33  *xValue)(sqlite3
f700: 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20  _context*);     
f710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f720: 2f 2a 20 43 75 72 72 65 6e 74 20 61 67 67 20 76  /* Current agg v
f730: 61 6c 75 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  alue */.  void (
f740: 2a 78 49 6e 76 65 72 73 65 29 28 73 71 6c 69 74  *xInverse)(sqlit
f750: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
f760: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
f770: 3b 20 2f 2a 20 69 6e 76 65 72 73 65 20 61 67 67  ; /* inverse agg
f780: 2d 73 74 65 70 20 2a 2f 0a 20 20 63 6f 6e 73 74  -step */.  const
f790: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
f7a0: 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74  /* SQL name of t
f7b0: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a  he function. */.
f7c0: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75    union {.    Fu
f7d0: 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20  ncDef *pHash;   
f7e0: 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
f7f0: 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  a different name
f800: 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61   but the same ha
f810: 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65  sh */.    FuncDe
f820: 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
f830: 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65  uctor;   /* Refe
f840: 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65  rence counted de
f850: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
f860: 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  n */.  } u;.};..
f870: 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  /*.** This struc
f880: 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65  ture encapsulate
f890: 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  s a user-functio
f8a0: 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c  n destructor cal
f8b0: 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e  lback (as.** con
f8c0: 66 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72  figured using cr
f8d0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
f8e0: 28 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65  ()) and a refere
f8f0: 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65  nce counter. Whe
f900: 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63  n.** create_func
f910: 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c  tion_v2() is cal
f920: 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  led to create a 
f930: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20  function with a 
f940: 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61  destructor,.** a
f950: 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f   single object o
f960: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
f970: 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65  llocated. FuncDe
f980: 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73  structor.nRef is
f990: 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e   set to.** the n
f9a0: 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66  umber of FuncDef
f9b0: 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64   objects created
f9c0: 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c   (either 1 or 3,
f9d0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
f9e0: 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20  ether.** or not 
f9f0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e  the specified en
fa00: 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45  coding is SQLITE
fa10: 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44  _ANY). The FuncD
fa20: 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a  ef.pDestructor.*
fa30: 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68  * member of each
fa40: 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63   of the new Func
fa50: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73  Def objects is s
fa60: 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  et to point to t
fa70: 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  he allocated.** 
fa80: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a  FuncDestructor..
fa90: 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72  **.** Thereafter
faa0: 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  , when one of th
fab0: 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  e FuncDef object
fac0: 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68  s is deleted, th
fad0: 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63  e reference.** c
fae0: 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a  ount on this obj
faf0: 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74  ect is decrement
fb00: 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63  ed. When it reac
fb10: 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72  hes 0, the destr
fb20: 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f  uctor.** is invo
fb30: 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63  ked and the Func
fb40: 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63  Destructor struc
fb50: 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73  ture freed..*/.s
fb60: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
fb70: 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65  ctor {.  int nRe
fb80: 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  f;.  void (*xDes
fb90: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20  troy)(void *);. 
fba0: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
fbb0: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  ;.};../*.** Poss
fbc0: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
fbd0: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20  FuncDef.flags.  
fbe0: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c  Note that the _L
fbf0: 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f  ENGTH and _TYPEO
fc00: 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74  F.** values must
fc10: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f   correspond to O
fc20: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
fc30: 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
fc40: 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51  FARG.  And.** SQ
fc50: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
fc60: 4e 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73  NT must be the s
fc70: 61 6d 65 20 61 73 20 53 51 4c 49 54 45 5f 44 45  ame as SQLITE_DE
fc80: 54 45 52 4d 49 4e 49 53 54 49 43 2e 20 20 54 68  TERMINISTIC.  Th
fc90: 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72  ere.** are asser
fca0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
fcb0: 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65  n the code to ve
fcc0: 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a  rify this..**.**
fcd0: 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
fce0: 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
fcf0: 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
fd00: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d     SQLITE_FUNC_M
fd10: 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f  INMAX    ==  NC_
fd20: 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 3d  MinMaxAgg      =
fd30: 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a  = SF_MinMaxAgg.*
fd40: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
fd50: 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d 20 20  C_LENGTH    ==  
fd60: 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
fd70: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fd80: 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d  UNC_TYPEOF    ==
fd90: 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41    OPFLAG_TYPEOFA
fda0: 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  RG.**     SQLITE
fdb0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20  _FUNC_CONSTANT  
fdc0: 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45 54 45 52  ==  SQLITE_DETER
fdd0: 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d 20 74 68  MINISTIC from th
fde0: 65 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c  e API.**     SQL
fdf0: 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b  ITE_FUNC_ENCMASK
fe00: 20 20 20 64 65 70 65 6e 64 73 20 6f 6e 20 53 51     depends on SQ
fe10: 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73  LITE_UTF* macros
fe20: 20 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23   in the API.*/.#
fe30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
fe40: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30  NC_ENCMASK  0x00
fe50: 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46  03 /* SQLITE_UTF
fe60: 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  8, SQLITE_UTF16B
fe70: 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a  E or UTF16LE */.
fe80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fe90: 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30  UNC_LIKE     0x0
fea0: 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65  004 /* Candidate
feb0: 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70   for the LIKE op
fec0: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
fed0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fee0: 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 30  C_CASE     0x000
fef0: 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74  8 /* Case-sensit
ff00: 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75  ive LIKE-type fu
ff10: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
ff20: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50  e SQLITE_FUNC_EP
ff30: 48 45 4d 20 20 20 20 30 78 30 30 31 30 20 2f 2a  HEM    0x0010 /*
ff40: 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c   Ephemeral.  Del
ff50: 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f  ete with VDBE */
ff60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ff70: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78  FUNC_NEEDCOLL 0x
ff80: 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47  0020 /* sqlite3G
ff90: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20  etFuncCollSeq() 
ffa0: 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 2a  might be called*
ffb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ffc0: 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30  _FUNC_LENGTH   0
ffd0: 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0040 /* Built-i
ffe0: 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74  n length() funct
fff0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
10000 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
10010 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20 42 75  F   0x0080 /* Bu
10020 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20  ilt-in typeof() 
10030 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
10040 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10050 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30 30 20  COUNT    0x0100 
10060 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e  /* Built-in coun
10070 74 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a  t(*) aggregate *
10080 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10090 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30  _FUNC_COALESCE 0
100a0 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0200 /* Built-i
100b0 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20  n coalesce() or 
100c0 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66  ifnull() */.#def
100d0 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
100e0 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30 30 20  UNLIKELY 0x0400 
100f0 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69  /* Built-in unli
10100 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  kely() function 
10110 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
10120 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
10130 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61  0x0800 /* Consta
10140 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65 20 61  nt inputs give a
10150 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74   constant output
10160 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
10170 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20  TE_FUNC_MINMAX  
10180 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20   0x1000 /* True 
10190 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61  for min() and ma
101a0 78 28 29 20 61 67 67 72 65 67 61 74 65 73 20 2a  x() aggregates *
101b0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
101c0 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30  _FUNC_SLOCHNG  0
101d0 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43  x2000 /* "Slow C
101e0 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20 63 6f  hange". Value co
101f0 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20 61 0a  nstant during a.
10200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10220 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75      ** single qu
10230 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68 61 6e  ery - might chan
10240 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a  ge over time */.
10250 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
10260 55 4e 43 5f 41 46 46 49 4e 49 54 59 20 30 78 34  UNC_AFFINITY 0x4
10270 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  000 /* Built-in 
10280 61 66 66 69 6e 69 74 79 28 29 20 66 75 6e 63 74  affinity() funct
10290 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
102a0 51 4c 49 54 45 5f 46 55 4e 43 5f 4f 46 46 53 45  QLITE_FUNC_OFFSE
102b0 54 20 20 20 30 78 38 30 30 30 20 2f 2a 20 42 75  T   0x8000 /* Bu
102c0 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65 5f 6f 66  ilt-in sqlite_of
102d0 66 73 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 20  fset() function 
102e0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
102f0 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 20 20 20  E_FUNC_WINDOW   
10300 30 78 30 30 30 31 30 30 30 30 20 2f 2a 20 42 75  0x00010000 /* Bu
10310 69 6c 74 2d 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e  ilt-in window-on
10320 6c 79 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  ly function */.#
10330 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10340 4e 43 5f 57 49 4e 44 4f 57 5f 53 49 5a 45 20 30  NC_WINDOW_SIZE 0
10350 78 32 30 30 30 30 20 2f 2a 20 52 65 71 75 69 72  x20000 /* Requir
10360 65 73 20 70 61 72 74 69 74 69 6f 6e 20 73 69 7a  es partition siz
10370 65 20 61 73 20 61 72 67 2e 20 2a 2f 0a 23 64 65  e as arg. */.#de
10380 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10390 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 30 30 34  _INTERNAL 0x0004
103a0 30 30 30 30 20 2f 2a 20 46 6f 72 20 75 73 65 20  0000 /* For use 
103b0 62 79 20 4e 65 73 74 65 64 50 61 72 73 65 28 29  by NestedParse()
103c0 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   only */../*.** 
103d0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
103e0 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
103f0 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
10400 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
10410 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
10420 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
10430 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
10440 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
10450 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
10460 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10470 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10480 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
10490 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
104a0 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
104b0 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
104c0 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20  nction zName.** 
104d0 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20      implemented 
104e0 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46  by C function xF
104f0 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73  unc that accepts
10500 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e   nArg arguments.
10510 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75   The.**     valu
10520 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67  e passed as iArg
10530 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
10540 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61  oid*) and made a
10550 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20  vailable.**     
10560 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  as the user-data
10570 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
10580 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66  ata()) for the f
10590 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20  unction. If.**  
105a0 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20     argument bNC 
105b0 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  is true, then th
105c0 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
105d0 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73  EDCOLL flag is s
105e0 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e  et..**.**   VFUN
105f0 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
10600 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10610 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65  unc).**     Like
10620 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74   FUNCTION except
10630 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51   it omits the SQ
10640 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
10650 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20  NT flag..**.**  
10660 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   DFUNCTION(zName
10670 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10680 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
10690 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
106a0 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
106b0 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
106c0 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64  ONSTANT flag and
106d0 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68 65  .**     adds the
106e0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
106f0 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64  CHNG flag.  Used
10700 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65   for date & time
10710 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20   functions.**   
10720 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20    and functions 
10730 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73  like sqlite_vers
10740 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63  ion() that can c
10750 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64  hange, but not d
10760 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73  uring.**     a s
10770 69 6e 67 6c 65 20 71 75 65 72 79 2e 20 20 54 68  ingle query.  Th
10780 65 20 69 41 72 67 20 69 73 20 69 67 6e 6f 72 65  e iArg is ignore
10790 64 2e 20 20 54 68 65 20 75 73 65 72 2d 64 61 74  d.  The user-dat
107a0 61 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 0a  a is always set.
107b0 2a 2a 20 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c  **     to a NULL
107c0 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62   pointer.  The b
107d0 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  NC parameter is 
107e0 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
107f0 20 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d    PURE_DATE(zNam
10800 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10810 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
10820 20 20 55 73 65 64 20 66 6f 72 20 22 70 75 72 65    Used for "pure
10830 22 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63  " date/time func
10840 74 69 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63 72  tions, this macr
10850 6f 20 69 73 20 6c 69 6b 65 20 44 46 55 4e 43 54  o is like DFUNCT
10860 49 4f 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65 70  ION.**     excep
10870 74 20 74 68 61 74 20 69 74 20 64 6f 65 73 20 73  t that it does s
10880 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  et the SQLITE_FU
10890 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
108a0 73 2e 20 20 69 41 72 67 20 69 73 0a 2a 2a 20 20  s.  iArg is.**  
108b0 20 20 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 74     ignored and t
108c0 68 65 20 75 73 65 72 2d 64 61 74 61 20 66 6f 72  he user-data for
108d0 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73   these functions
108e0 20 69 73 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a   is set to an .*
108f0 2a 20 20 20 20 20 61 72 62 69 74 72 61 72 79 20  *     arbitrary 
10900 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  non-NULL pointer
10910 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d  .  The bNC param
10920 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64  eter is not used
10930 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47  ..**.**   AGGREG
10940 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
10950 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65   iArg, bNC, xSte
10960 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20  p, xFinal).**   
10970 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
10980 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
10990 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
109a0 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
109b0 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
109c0 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
109d0 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
109e0 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
109f0 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
10a00 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
10a10 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
10a20 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
10a30 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
10a40 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
10a50 20 20 20 57 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     WFUNCTION(zNa
10a60 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10a70 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78  xStep, xFinal, x
10a80 56 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 29  Value, xInverse)
10a90 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
10aa0 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
10ab0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
10ac0 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
10ad0 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
10ae0 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
10af0 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
10b00 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
10b10 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
10b20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
10b30 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
10b40 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
10b50 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
10b60 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
10b70 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
10b80 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
10b90 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
10ba0 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
10bb0 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
10bc0 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
10bd0 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
10be0 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61  me.**     that a
10bf0 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
10c00 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70  ments and is imp
10c10 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61  lemented by a ca
10c20 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66  ll to C.**     f
10c30 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63  unction likeFunc
10c40 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20  . Argument pArg 
10c50 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
10c60 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a  id *) and made.*
10c70 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20  *     available 
10c80 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  as the function 
10c90 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
10ca0 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e  e3_user_data()).
10cb0 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63   The.**     Func
10cc0 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62  Def.flags variab
10cd0 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  le is set to the
10ce0 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
10cf0 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20   the flags.**   
10d00 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a    parameter..*/.
10d10 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
10d20 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10d30 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
10d40 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
10d50 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
10d60 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10d70 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10d80 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
10d90 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
10da0 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
10db0 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10dc0 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56   {0} }.#define V
10dd0 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10de0 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10df0 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
10e00 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
10e10 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
10e20 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
10e30 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
10e40 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
10e50 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
10e60 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
10e70 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e DFUNCTION(zNam
10e80 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
10e90 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
10ea0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
10eb0 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
10ec0 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30  _UTF8, \.   0, 0
10ed0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10ee0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10ef0 23 64 65 66 69 6e 65 20 50 55 52 45 5f 44 41 54  #define PURE_DAT
10f00 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
10f10 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10f20 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10f30 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
10f40 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49  SQLITE_UTF8|SQLI
10f50 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
10f60 2c 20 5c 0a 20 20 20 28 76 6f 69 64 2a 29 26 73  , \.   (void*)&s
10f70 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 30 2c  qlite3Config, 0,
10f80 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
10f90 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
10fa0 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32  define FUNCTION2
10fb0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10fc0 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20  rg, bNC, xFunc, 
10fd0 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
10fe0 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e  {nArg,SQLITE_FUN
10ff0 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
11000 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
11010 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
11020 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20  )|extraFlags,\. 
11030 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
11040 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
11050 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
11060 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
11070 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
11080 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
11090 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
110a0 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
110b0 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
110c0 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
110d0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
110e0 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67  COLL), \.   pArg
110f0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
11100 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23  , 0, #zName, }.#
11110 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
11120 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
11130 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
11140 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
11150 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
11160 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20  UTF8|flags, \.  
11170 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
11180 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c   likeFunc, 0, 0,
11190 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
111a0 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
111b0 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
111c0 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
111d0 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 29   xFinal, xValue)
111e0 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
111f0 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
11200 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
11210 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
11220 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
11230 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
11240 78 56 61 6c 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c  xValue,0,#zName,
11250 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47   {0}}.#define AG
11260 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20  GREGATE2(zName, 
11270 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
11280 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78  Step, xFinal, ex
11290 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
112a0 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
112b0 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
112c0 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
112d0 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49  Flags, \.   SQLI
112e0 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
112f0 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
11300 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e  nal,xFinal,0,#zN
11310 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
11320 65 20 57 41 47 47 52 45 47 41 54 45 28 7a 4e 61  e WAGGREGATE(zNa
11330 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
11340 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
11350 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65 72  , xValue, xInver
11360 73 65 2c 20 66 29 20 5c 0a 20 20 7b 6e 41 72 67  se, f) \.  {nArg
11370 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
11380 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
11390 45 44 43 4f 4c 4c 29 7c 66 2c 20 5c 0a 20 20 20  EDCOLL)|f, \.   
113a0 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
113b0 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
113c0 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 78  ,xFinal,xValue,x
113d0 49 6e 76 65 72 73 65 2c 23 7a 4e 61 6d 65 2c 20  Inverse,#zName, 
113e0 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 49 4e 54  {0}}.#define INT
113f0 45 52 4e 41 4c 5f 46 55 4e 43 54 49 4f 4e 28 7a  ERNAL_FUNCTION(z
11400 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 78 46 75 6e  Name, nArg, xFun
11410 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
11420 4c 49 54 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e  LITE_FUNC_INTERN
11430 41 4c 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 53  AL|SQLITE_UTF8|S
11440 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
11450 41 4e 54 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20  ANT, \.   0, 0, 
11460 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
11470 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 0a 0a  #zName, {0} }...
11480 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e  /*.** All curren
11490 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65  t savepoints are
114a0 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
114b0 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
114c0 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e  g at.** sqlite3.
114d0 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20  pSavepoint. The 
114e0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e  first element in
114f0 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65   the list is the
11500 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a   most recently.*
11510 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69  * opened savepoi
11520 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61  nt. Savepoints a
11530 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  re added to the 
11540 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65  list by the vdbe
11550 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  .** OP_Savepoint
11560 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
11570 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e  .struct Savepoin
11580 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  t {.  char *zNam
11590 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
115a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76            /* Sav
115b0 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c  epoint name (nul
115c0 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a  -terminated) */.
115d0 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
115e0 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
115f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11600 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76  of deferred fk v
11610 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  iolations */.  i
11620 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
11630 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
11640 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11650 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e  deferred imm fk.
11660 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
11670 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
11680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
11690 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69  ent savepoint (i
116a0 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  f any) */.};../*
116b0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
116c0 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  g are used as th
116d0 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74  e second paramet
116e0 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76  er to sqlite3Sav
116f0 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64  epoint(),.** and
11700 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d   as the P1 argum
11710 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61  ent to the OP_Sa
11720 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
11730 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ion..*/.#define 
11740 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
11750 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
11760 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
11770 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41      1.#define SA
11780 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
11790 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63     2.../*.** Eac
117a0 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20  h SQLite module 
117b0 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64  (virtual table d
117c0 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65  efinition) is de
117d0 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  fined by an.** i
117e0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
117f0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
11800 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68  re, stored in th
11810 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c  e sqlite3.aModul
11820 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  e.** hash table.
11830 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c  .*/.struct Modul
11840 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  e {.  const sqli
11850 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
11860 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61  ule;       /* Ca
11870 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20  llback pointers 
11880 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
11890 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
118a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
118b0 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  e passed to crea
118c0 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
118d0 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
118e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118f0 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
11900 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
11910 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
11920 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
11930 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20  id *);          
11940 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74    /* Module dest
11950 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
11960 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f  */.  Table *pEpo
11970 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
11980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f            /* Epo
11990 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72  nymous table for
119a0 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a   this module */.
119b0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d  };../*.** inform
119c0 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
119d0 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51   column of an SQ
119e0 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20  L table is held 
119f0 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  in an instance.*
11a00 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
11a10 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ure..*/.struct C
11a20 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a  olumn {.  char *
11a30 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61  zName;     /* Na
11a40 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  me of this colum
11a50 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68  n, \000, then th
11a60 65 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72  e type */.  Expr
11a70 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20   *pDflt;     /* 
11a80 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  Default value of
11a90 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
11aa0 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20    char *zColl;  
11ab0 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
11ac0 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55  sequence.  If NU
11ad0 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  LL, use the defa
11ae0 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e  ult */.  u8 notN
11af0 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  ull;      /* An 
11b00 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e  OE_ code for han
11b10 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c  dling a NOT NULL
11b20 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
11b30 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
11b40 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
11b50 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76  SQLITE_AFF_... v
11b60 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a  alues */.  u8 sz
11b70 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Est;        /* E
11b80 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
11b90 20 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63   value in this c
11ba0 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e  olumn. sizeof(IN
11bb0 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f  T)==1 */.  u8 co
11bc0 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42  lFlags;     /* B
11bd0 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65  oolean propertie
11be0 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f  s.  See COLFLAG_
11bf0 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a   defines below *
11c00 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
11c10 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75   values for Colu
11c20 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a  mn.colFlags:.*/.
11c30 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
11c40 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20  PRIMKEY  0x0001 
11c50 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20     /* Column is 
11c60 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d  part of the prim
11c70 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
11c80 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45  ne COLFLAG_HIDDE
11c90 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  N   0x0002    /*
11ca0 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e   A hidden column
11cb0 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   in a virtual ta
11cc0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  ble */.#define C
11cd0 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20  OLFLAG_HASTYPE  
11ce0 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70  0x0004    /* Typ
11cf0 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63  e name follows c
11d00 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64  olumn name */.#d
11d10 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 55 4e  efine COLFLAG_UN
11d20 49 51 55 45 20 20 20 30 78 30 30 30 38 20 20 20  IQUE   0x0008   
11d30 20 2f 2a 20 43 6f 6c 75 6d 6e 20 64 65 66 20 63   /* Column def c
11d40 6f 6e 74 61 69 6e 73 20 22 55 4e 49 51 55 45 22  ontains "UNIQUE"
11d50 20 6f 72 20 22 50 4b 22 20 2a 2f 0a 23 64 65 66   or "PK" */.#def
11d60 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 53 4f 52 54  ine COLFLAG_SORT
11d70 45 52 52 45 46 20 30 78 30 30 31 30 20 20 20 2f  ERREF 0x0010   /
11d80 2a 20 55 73 65 20 73 6f 72 74 65 72 2d 72 65 66  * Use sorter-ref
11d90 73 20 77 69 74 68 20 74 68 69 73 20 63 6f 6c 75  s with this colu
11da0 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22  mn */../*.** A "
11db0 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e  Collating Sequen
11dc0 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62  ce" is defined b
11dd0 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
11de0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
11df0 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e  * structure. Con
11e00 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c  ceptually, a col
11e10 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
11e20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61  consists of a na
11e30 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70  me and.** a comp
11e40 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74  arison routine t
11e50 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
11e60 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65  order of that se
11e70 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  quence..**.** If
11e80 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73   CollSeq.xCmp is
11e90 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20   NULL, it means 
11ea0 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c  that the.** coll
11eb0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
11ec0 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e  s undefined.  In
11ed0 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61  dices built on a
11ee0 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63  n undefined.** c
11ef0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11f00 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61  e may not be rea
11f10 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f  d or written..*/
11f20 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20  .struct CollSeq 
11f30 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
11f40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
11f50 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69  e of the collati
11f60 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46  ng sequence, UTF
11f70 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20  -8 encoded */.  
11f80 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
11f90 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
11fa0 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62  coding handled b
11fb0 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f  y xCmp() */.  vo
11fc0 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20  id *pUser;      
11fd0 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
11fe0 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20  ument to xCmp() 
11ff0 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29  */.  int (*xCmp)
12000 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
12010 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f  t void*, int, co
12020 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
12030 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a  id (*xDel)(void*
12040 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f  );  /* Destructo
12050 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d  r for pUser */.}
12060 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20  ;../*.** A sort 
12070 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74  order can be eit
12080 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e  her ASC or DESC.
12090 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
120a0 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20  TE_SO_ASC       
120b0 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  0  /* Sort in as
120c0 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
120d0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
120e0 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20  SO_DESC      1  
120f0 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
12100 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
12110 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
12120 55 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20  UNDEFINED -1 /* 
12130 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70  No sort order sp
12140 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  ecified */../*.*
12150 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
12160 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
12170 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
12180 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
12190 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
121a0 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
121b0 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
121c0 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
121d0 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
121e0 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
121f0 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
12200 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
12210 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74  e by numbering t
12220 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63  he values consec
12230 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42  utively..**.** B
12240 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73  ut rather than s
12250 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31  tart with 0 or 1
12260 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20  , we begin with 
12270 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a  'A'.  That way,.
12280 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65  ** when multiple
12290 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20   affinity types 
122a0 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64  are concatenated
122b0 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61   into a string a
122c0 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68  nd.** used as th
122d0 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68  e P4 operand, th
122e0 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20  ey will be more 
122f0 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  readable..**.** 
12300 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74  Note also that t
12310 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73  he numeric types
12320 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67   are grouped tog
12330 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65  ether so that te
12340 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e  sting.** for a n
12350 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61  umeric type is a
12360 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73   single comparis
12370 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f  on.  And the BLO
12380 42 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e  B type is first.
12390 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
123a0 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20  TE_AFF_BLOB     
123b0 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'A'.#define SQLI
123c0 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
123d0 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'B'.#define SQLI
123e0 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
123f0 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'C'.#define SQLI
12400 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20  TE_AFF_INTEGER  
12410 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'D'.#define SQLI
12420 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20  TE_AFF_REAL     
12430 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c  'E'..#define sql
12440 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
12450 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
12460 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
12470 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
12480 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
12490 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
124a0 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
124b0 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
124c0 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f  finity value..*/
124d0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
124e0 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
124f0 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
12500 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
12510 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
12520 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
12530 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
12540 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
12550 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
12560 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
12570 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
12580 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
12590 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
125a0 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
125b0 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
125c0 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
125d0 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
125e0 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
125f0 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
12600 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
12610 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
12620 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
12630 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
12640 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
12650 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
12660 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20  QLITE_KEEPNULL  
12670 20 20 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64     0x08  /* Used
12680 20 62 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72   by vector == or
12690 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   <> */.#define S
126a0 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
126b0 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
126c0 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
126d0 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
126e0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
126f0 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
12700 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
12710 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
12720 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
12730 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
12740 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
12750 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
12760 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12770 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
12780 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
12790 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
127a0 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
127b0 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
127c0 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
127d0 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
127e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
127f0 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
12800 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
12810 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
12820 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
12830 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
12840 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
12850 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
12860 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
12870 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
12880 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
12890 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
128a0 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
128b0 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
128c0 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
128d0 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
128e0 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
128f0 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
12900 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
12910 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
12920 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
12930 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d  tual table.** im
12940 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
12950 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
12960 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
12970 68 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a  hared between.**
12980 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12990 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
129a0 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
129b0 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
129c0 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  ase.** schema is
129d0 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20   shared, as the 
129e0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
129f0 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20  ften stores the 
12a00 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
12a10 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61  ection handle pa
12a20 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74  ssed to it via t
12a30 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72  he xConnect() or
12a40 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f   xCreate() metho
12a50 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74  d.** during init
12a60 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72  ialization inter
12a70 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61  nally. This data
12a80 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12a90 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68  handle may.** th
12aa0 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68  en be used by th
12ab0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
12ac0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
12ad0 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61  o access real ta
12ae0 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74  bles.** within t
12af0 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20  he database. So 
12b00 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72  that they appear
12b10 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
12b20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73  callers.** trans
12b30 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
12b40 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
12b50 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
12b60 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ame database.** 
12b70 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68  connection as th
12b80 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75  at used to execu
12b90 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e  te SQL operation
12ba0 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s on the virtual
12bb0 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
12bc0 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  l VTable objects
12bd0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
12be0 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62   to a single tab
12bf0 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a  le in a shared.*
12c00 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
12c10 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  a are initially 
12c20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
12c30 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20  ed-list pointed 
12c40 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62  to by.** the Tab
12c50 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65  le.pVTable membe
12c60 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68  r variable of th
12c70 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
12c80 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a  Table object..**
12c90 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33   When an sqlite3
12ca0 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61  _prepare() opera
12cb0 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64  tion is required
12cc0 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
12cd0 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c  irtual.** table,
12ce0 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65   it searches the
12cf0 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54   list for the VT
12d00 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73  able that corres
12d10 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20  ponds to the.** 
12d20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
12d30 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72  ion doing the pr
12d40 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f  eparing so as to
12d50 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74   use the correct
12d60 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62  .** sqlite3_vtab
12d70 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20  * handle in the 
12d80 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a  compiled query..
12d90 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e  **.** When an in
12da0 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62  -memory Table ob
12db0 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20  ject is deleted 
12dc0 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65  (for example whe
12dd0 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  n the.** schema 
12de0 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65  is being reloade
12df0 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f  d for some reaso
12e00 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f  n), the VTable o
12e10 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a  bjects are not.*
12e20 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
12e30 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
12e40 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
12e50 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a  xDisconnect()ed.
12e60 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
12e70 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72  Instead, they ar
12e80 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  e moved from the
12e90 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c   Table.pVTable l
12ea0 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65  ist to.** anothe
12eb0 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  r linked list he
12ec0 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  aded by the sqli
12ed0 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20  te3.pDisconnect 
12ee0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a  member of the.**
12ef0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
12f00 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
12f10 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20  . They are then 
12f20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e  deleted/xDisconn
12f30 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69  ected.** next ti
12f40 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69  me a statement i
12f50 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
12f60 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20   said sqlite3*. 
12f70 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20  This is done.** 
12f80 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
12f90 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69  k issues involvi
12fa0 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69  ng multiple sqli
12fb0 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65  te3.mutex mutexe
12fc0 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63  s..** Refer to c
12fd0 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75  omments above fu
12fe0 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74  nction sqlite3Vt
12ff0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66  abUnlockList() f
13000 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61  or an.** explana
13010 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69  tion as to why i
13020 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64  t is safe to add
13030 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20   an entry to an 
13040 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
13050 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68  ect.** list with
13060 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  out holding the 
13070 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
13080 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
13090 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  x..**.** The mem
130a0 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  ory for objects 
130b0 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
130c0 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64  always allocated
130d0 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62   by.** sqlite3Db
130e0 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20  Malloc(), using 
130f0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  the connection h
13100 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  andle stored in 
13110 56 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20  VTable.db as.** 
13120 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
13130 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54  nt..*/.struct VT
13140 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  able {.  sqlite3
13150 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
13160 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
13170 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
13180 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74  ated with this t
13190 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65  able */.  Module
131a0 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20   *pMod;         
131b0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
131c0 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  o module impleme
131d0 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  ntation */.  sql
131e0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
131f0 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  ;      /* Pointe
13200 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e  r to vtab instan
13210 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ce */.  int nRef
13220 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13230 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
13240 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
13250 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75  structure */.  u
13260 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20  8 bConstraint;  
13270 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
13280 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   if constraints 
13290 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f  are supported */
132a0 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
132b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
132c0 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56  Depth of the SAV
132d0 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a  EPOINT stack */.
132e0 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
132f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13300 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
13310 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
13320 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
13330 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20  schema for each 
13340 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69  SQL table and vi
13350 65 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ew is represente
13360 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62  d in memory.** b
13370 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
13380 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
13390 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
133a0 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
133b0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
133c0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
133d0 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
133e0 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
133f0 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66  l;        /* Inf
13400 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
13410 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
13420 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
13430 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
13440 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74  SQL indexes on t
13450 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  his table. */.  
13460 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
13470 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72       /* NULL for
13480 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73   tables.  Points
13490 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69   to definition i
134a0 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46  f a view. */.  F
134b0 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20  Key *pFKey;     
134c0 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
134d0 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
134e0 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
134f0 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
13500 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f  zColAff;       /
13510 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
13520 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
13530 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
13540 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
13550 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
13560 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
13570 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
13580 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
13590 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73  ... also used as
135a0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73   column name lis
135b0 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20  t in a VIEW */. 
135c0 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
135d0 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
135e0 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69  ree page for thi
135f0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32  s table */.  u32
13600 20 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20 20   nTabRef;       
13610 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
13620 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
13630 54 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74  Table */.  u32 t
13640 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
13650 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20  /* Mask of TF_* 
13660 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20  values */.  i16 
13670 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20  iPKey;          
13680 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74   /* If not negat
13690 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50  ive, use aCol[iP
136a0 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69  Key] as the rowi
136b0 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  d */.  i16 nCol;
136c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
136d0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
136e0 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
136f0 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c  /.  LogEst nRowL
13700 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69  ogEst;   /* Esti
13710 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61  mated rows in ta
13720 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74  ble - from sqlit
13730 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f  e_stat1 table */
13740 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52  .  LogEst szTabR
13750 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  ow;     /* Estim
13760 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63  ated size of eac
13770 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62  h table row in b
13780 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ytes */.#ifdef S
13790 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53  QLITE_ENABLE_COS
137a0 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63  TMULT.  LogEst c
137b0 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20  ostMult;     /* 
137c0 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20  Cost multiplier 
137d0 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74  for using this t
137e0 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  able */.#endif. 
137f0 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
13800 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
13810 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
13820 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
13830 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
13840 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
13850 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
13860 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
13870 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
13880 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
13890 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
138a0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
138b0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
138c0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
138d0 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
138e0 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
138f0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
13900 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
13910 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
13920 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d  uleArg;  /* 0: m
13930 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20  odule 1: schema 
13940 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e  2: vtab name 3..
13950 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61  .: args */.  VTa
13960 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
13970 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
13980 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
13990 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
139a0 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
139b0 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
139c0 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
139d0 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
139e0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
139f0 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
13a00 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
13a10 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
13a20 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
13a30 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
13a40 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
13a50 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
13a60 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
13a70 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
13a80 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64  **.** TF_OOOHidd
13a90 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61  en applies to ta
13aa0 62 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68 61  bles or view tha
13ab0 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f  t have hidden co
13ac0 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a  lumns that are.*
13ad0 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f  * followed by no
13ae0 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  n-hidden columns
13af0 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52  .  Example:  "CR
13b00 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
13b10 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74  LE x USING.** vt
13b20 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29  ab1(a HIDDEN, b)
13b30 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69  ;".  Since "b" i
13b40 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63  s a non-hidden c
13b50 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73  olumn but "a" is
13b60 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20   hidden,.** the 
13b70 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74  TF_OOOHidden att
13b80 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70  ribute would app
13b90 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e  ly in this case.
13ba0 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65    Such tables re
13bb0 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c  quire.** special
13bc0 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67   handling during
13bd0 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69   INSERT processi
13be0 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ng..*/.#define T
13bf0 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
13c00 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 52    0x0001    /* R
13c10 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
13c20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
13c30 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
13c40 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
13c50 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   An ephemeral ta
13c60 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
13c70 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
13c80 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
13c90 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
13ca0 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
13cb0 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65  e TF_Autoincreme
13cc0 6e 74 20 20 20 30 78 30 30 30 38 20 20 20 20 2f  nt   0x0008    /
13cd0 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72  * Integer primar
13ce0 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63  y key is autoinc
13cf0 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  rement */.#defin
13d00 65 20 54 46 5f 48 61 73 53 74 61 74 31 20 20 20  e TF_HasStat1   
13d10 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
13d20 2a 20 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65 74  * nRowLogEst set
13d30 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
13d40 74 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  t1 */.#define TF
13d50 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20  _WithoutRowid   
13d60 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 4e 6f   0x0020    /* No
13d70 20 72 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59   rowid.  PRIMARY
13d80 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20   KEY is the key 
13d90 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f  */.#define TF_No
13da0 56 69 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78  VisibleRowid  0x
13db0 30 30 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73  0040    /* No us
13dc0 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69  er-visible "rowi
13dd0 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  d" column */.#de
13de0 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65  fine TF_OOOHidde
13df0 6e 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20  n       0x0080  
13e00 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65    /* Out-of-Orde
13e10 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  r hidden columns
13e20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53   */.#define TF_S
13e30 74 61 74 73 55 73 65 64 20 20 20 20 20 20 20 30  tatsUsed       0
13e40 78 30 31 30 30 20 20 20 20 2f 2a 20 51 75 65 72  x0100    /* Quer
13e50 79 20 70 6c 61 6e 6e 65 72 20 64 65 63 69 73 69  y planner decisi
13e60 6f 6e 73 20 61 66 66 65 63 74 65 64 20 62 79 0a  ons affected by.
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e90 20 20 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61 69       ** Index.ai
13ea0 52 6f 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c 75  RowLogEst[] valu
13eb0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  es */.#define TF
13ec0 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20 20  _HasNotNull     
13ed0 20 30 78 30 32 30 30 20 20 20 20 2f 2a 20 43 6f   0x0200    /* Co
13ee0 6e 74 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20  ntains NOT NULL 
13ef0 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
13f00 64 65 66 69 6e 65 20 54 46 5f 53 68 61 64 6f 77  define TF_Shadow
13f10 20 20 20 20 20 20 20 20 20 20 30 78 30 34 30 30            0x0400
13f20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
13f30 61 20 73 68 61 64 6f 77 20 74 61 62 6c 65 20 2a  a shadow table *
13f40 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  /../*.** Test to
13f50 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20   see whether or 
13f60 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61  not a table is a
13f70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
13f80 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65   This is.** done
13f90 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74   as a macro so t
13fa0 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f  hat it will be o
13fb0 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65  ptimized out whe
13fc0 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  n virtual.** tab
13fd0 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d  le support is om
13fe0 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
13ff0 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  uild..*/.#ifndef
14000 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
14010 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
14020 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
14030 20 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d 6f 64        ((X)->nMod
14040 75 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a 23 20  uleArg).#else.# 
14050 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
14060 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e 64  l(X)      0.#end
14070 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
14080 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
14090 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64   a column is hid
140a0 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72 79  den.  IsOrdinary
140b0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a  HiddenColumn().*
140c0 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  * only works for
140d0 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61 62   non-virtual tab
140e0 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74 61  les (ordinary ta
140f0 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29 20  bles and views) 
14100 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  and is.** always
14110 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53 51   false unless SQ
14120 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
14130 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65  EN_COLUMNS is de
14140 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49  fined.  The.** I
14150 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20  sHiddenColumn() 
14160 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61 6c  macro is general
14170 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66   purpose..*/.#if
14180 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
14190 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
141a0 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e 65  LUMNS).#  define
141b0 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
141c0 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29  X)         (((X)
141d0 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
141e0 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
141f0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
14200 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
14210 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46  n(X) (((X)->colF
14220 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
14230 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66  IDDEN)!=0).#elif
14240 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
14250 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
14260 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  LE).#  define Is
14270 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
14280 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63          (((X)->c
14290 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
142a0 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20  G_HIDDEN)!=0).# 
142b0 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61   define IsOrdina
142c0 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  ryHiddenColumn(X
142d0 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ) 0.#else.#  def
142e0 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
142f0 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 30 0a  mn(X)         0.
14300 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
14310 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
14320 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f  (X) 0.#endif.../
14330 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65  * Does the table
14340 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f   have a rowid */
14350 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69  .#define HasRowi
14360 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e  d(X)     (((X)->
14370 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69  tabFlags & TF_Wi
14380 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a  thoutRowid)==0).
14390 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52  #define VisibleR
143a0 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74  owid(X) (((X)->t
143b0 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56  abFlags & TF_NoV
143c0 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29  isibleRowid)==0)
143d0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72  ../*.** Each for
143e0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
143f0 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  int is an instan
14400 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
14410 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
14420 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b  *.** A foreign k
14430 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64  ey is associated
14440 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73   with two tables
14450 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61  .  The "from" ta
14460 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61  ble is.** the ta
14470 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
14480 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  s the REFERENCES
14490 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65   clause that cre
144a0 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e  ates the foreign
144b0 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74  .** key.  The "t
144c0 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20  o" table is the 
144d0 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61  table that is na
144e0 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52  med in the REFER
144f0 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a  ENCES clause..**
14500 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65   Consider this e
14510 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
14520 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65    CREATE TABLE e
14530 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49  x1(.**       a I
14540 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
14550 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49  EY,.**       b I
14560 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e  NTEGER CONSTRAIN
14570 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53  T fk1 REFERENCES
14580 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29   ex2(x).**     )
14590 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65  ;.**.** For fore
145a0 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74  ign key "fk1", t
145b0 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
145c0 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74   "ex1" and the t
145d0 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22  o-table is "ex2"
145e0 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20  ..** Equivalent 
145f0 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  names:.**.**    
14600 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63   from-table == c
14610 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20  hild-table.**   
14620 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20      to-table == 
14630 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a  parent-table.**.
14640 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
14650 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
14660 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
14670 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
14680 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
14690 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
146a0 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
146b0 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
146c0 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
146d0 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
146e0 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
146f0 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
14700 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
14710 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
14720 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74  ..**.** The list
14730 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20   of all parents 
14740 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20  for child Table 
14750 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70  X is held at X.p
14760 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69  FKey..**.** A li
14770 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72  st of all childr
14780 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e  en for a table n
14790 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69  amed Z (which mi
147a0 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69  ght not even exi
147b0 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69  st).** is held i
147c0 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73  n Schema.fkeyHas
147d0 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65  h with a hash ke
147e0 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63  y of Z..*/.struc
147f0 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65  t FKey {.  Table
14800 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20   *pFrom;     /* 
14810 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
14820 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
14830 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69  clause (aka: Chi
14840 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ld) */.  FKey *p
14850 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65  NextFrom;  /* Ne
14860 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65  xt FKey with the
14870 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20   same in pFrom. 
14880 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70  Next parent of p
14890 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  From */.  char *
148a0 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  zTo;        /* N
148b0 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61  ame of table tha
148c0 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73  t the key points
148d0 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74   to (aka: Parent
148e0 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
148f0 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74  xtTo;    /* Next
14900 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
14910 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f  To. Next child o
14920 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79  f zTo. */.  FKey
14930 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a   *pPrevTo;    /*
14940 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74   Previous with t
14950 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20  he same zTo */. 
14960 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
14970 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14980 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
14990 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
149a0 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
149b0 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
149c0 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  ;       /* True 
149d0 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
149e0 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
149f0 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
14a00 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
14a10 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20  ];        /* ON 
14a20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50  DELETE and ON UP
14a30 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65  DATE actions, re
14a40 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20  spectively */.  
14a50 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67  Trigger *apTrigg
14a60 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72  er[2];/* Trigger
14a70 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20  s for aAction[] 
14a80 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  actions */.  str
14a90 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20  uct sColMap {   
14aa0 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66     /* Mapping of
14ab0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
14ac0 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
14ad0 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
14ae0 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20  From;           
14af0 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
14b00 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
14b10 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
14b20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
14b30 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a  e of column in z
14b40 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65  To.  If NULL use
14b50 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
14b60 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20    } aCol[1];    
14b70 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
14b80 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
14b90 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f   nCol columns */
14ba0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74  .};../*.** SQLit
14bb0 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
14bc0 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
14bd0 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73  o resolve a cons
14be0 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  traint.** error.
14bf0 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65    ROLLBACK proce
14c00 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
14c10 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
14c20 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65  olation.** cause
14c30 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
14c40 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61  in process to fa
14c50 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63  il and for the c
14c60 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
14c70 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c  on.** to be roll
14c80 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20  ed back.  ABORT 
14c90 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
14ca0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
14cb0 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69  n process.** fai
14cc0 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72  ls and any prior
14cd0 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68   changes from th
14ce0 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e  at one operation
14cf0 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c   are backed out,
14d00 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e  .** but the tran
14d10 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72  saction is not r
14d20 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49  olled back.  FAI
14d30 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  L processing mea
14d40 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f  ns that.** the o
14d50 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  peration in prog
14d60 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72  ress stops and r
14d70 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20  eturns an error 
14d80 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72  code.  But prior
14d90 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20  .** changes due 
14da0 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  to the same oper
14db0 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61  ation are not ba
14dc0 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20  cked out and no 
14dd0 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75  rollback.** occu
14de0 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e  rs.  IGNORE mean
14df0 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69  s that the parti
14e00 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63  cular row that c
14e10 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72  aused the constr
14e20 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73  aint.** error is
14e30 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72   not inserted or
14e40 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65   updated.  Proce
14e50 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
14e60 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20  and no error.** 
14e70 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45  is returned.  RE
14e80 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74  PLACE means that
14e90 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74   preexisting dat
14ea0 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
14eb0 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51  caused.** a UNIQ
14ec0 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  UE constraint vi
14ed0 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
14ee0 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ved so that the 
14ef0 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a  new insert or.**
14f00 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63   update can proc
14f10 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  eed.  Processing
14f20 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
14f30 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72  o error is repor
14f40 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52  ted..**.** RESTR
14f50 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e  ICT, SETNULL, an
14f60 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e  d CASCADE action
14f70 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20  s apply only to 
14f80 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a  foreign keys..**
14f90 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65   RESTRICT is the
14fa0 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66   same as ABORT f
14fb0 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72  or IMMEDIATE for
14fc0 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68  eign keys and th
14fd0 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c  e.** same as ROL
14fe0 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52  LBACK for DEFERR
14ff0 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c  ED keys.  SETNUL
15000 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  L means that the
15010 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
15020 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20  is set to NULL. 
15030 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74   CASCADE means t
15040 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20  hat a DELETE or 
15050 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a  UPDATE of the.**
15060 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
15070 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61  e row is propaga
15080 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77  ted into the row
15090 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a   that holds the.
150a0 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a  ** foreign key..
150b0 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
150c0 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
150d0 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
150e0 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
150f0 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
15100 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
15110 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
15120 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
15130 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
15140 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
15150 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
15160 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
15170 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
15180 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
15190 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
151a0 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
151b0 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
151c0 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
151d0 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
151e0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
151f0 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
15200 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
15210 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
15220 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
15230 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
15240 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
15250 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
15260 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
15270 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
15280 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
15290 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
152a0 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
152b0 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
152c0 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
152d0 23 64 65 66 69 6e 65 20 4f 45 5f 55 70 64 61 74  #define OE_Updat
152e0 65 20 20 20 36 20 20 20 2f 2a 20 50 72 6f 63 65  e   6   /* Proce
152f0 73 73 20 61 73 20 61 20 44 4f 20 55 50 44 41 54  ss as a DO UPDAT
15300 45 20 69 6e 20 61 6e 20 75 70 73 65 72 74 20 2a  E in an upsert *
15310 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73  /.#define OE_Res
15320 74 72 69 63 74 20 37 20 20 20 2f 2a 20 4f 45 5f  trict 7   /* OE_
15330 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49  Abort for IMMEDI
15340 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  ATE, OE_Rollback
15350 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f   for DEFERRED */
15360 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e  .#define OE_SetN
15370 75 6c 6c 20 20 38 20 20 20 2f 2a 20 53 65 74 20  ull  8   /* Set 
15380 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
15390 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f  value to NULL */
153a0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44  .#define OE_SetD
153b0 66 6c 74 20 20 39 20 20 20 2f 2a 20 53 65 74 20  flt  9   /* Set 
153c0 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
153d0 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66  value to its def
153e0 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ault */.#define 
153f0 4f 45 5f 43 61 73 63 61 64 65 20 20 31 30 20 20  OE_Cascade  10  
15400 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63  /* Cascade the c
15410 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
15420 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 31  e OE_Default  11
15430 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
15440 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
15450 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
15460 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
15470 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
15480 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
15490 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
154a0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
154b0 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
154c0 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
154d0 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 0a   to control the.
154e0 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  ** comparison of
154f0 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b   the two index k
15500 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  eys..**.** Note 
15510 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b  that aSortOrder[
15520 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61  ] and aColl[] ha
15530 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74  ve nField+1 slot
15540 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  s.  There.** are
15550 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f   nField slots fo
15560 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  r the columns of
15570 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f   an index then o
15580 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a  ne extra slot.**
15590 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61   for the rowid a
155a0 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  t the end..*/.st
155b0 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
155c0 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20   u32 nRef;      
155d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
155e0 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  f references to 
155f0 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a  this KeyInfo obj
15600 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ect */.  u8 enc;
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15620 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20  Text encoding - 
15630 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
15640 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f  E_UTF* values */
15650 0a 20 20 75 31 36 20 6e 4b 65 79 46 69 65 6c 64  .  u16 nKeyField
15660 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
15670 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20   of key columns 
15680 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
15690 20 20 75 31 36 20 6e 41 6c 6c 46 69 65 6c 64 3b    u16 nAllField;
156a0 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 63        /* Total c
156b0 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75 64 69 6e  olumns, includin
156c0 67 20 6b 65 79 20 70 6c 75 73 20 6f 74 68 65 72  g key plus other
156d0 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  s */.  sqlite3 *
156e0 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
156f0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
15700 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61  ction */.  u8 *a
15710 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f  SortOrder;     /
15720 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72  * Sort order for
15730 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f   each column. */
15740 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c  .  CollSeq *aCol
15750 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  l[1];  /* Collat
15760 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ing sequence for
15770 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
15780 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  e key */.};../*.
15790 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68  ** This object h
157a0 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 77 68  olds a record wh
157b0 69 63 68 20 68 61 73 20 62 65 65 6e 20 70 61 72  ich has been par
157c0 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
157d0 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64  ividual.** field
157e0 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  s, for the purpo
157f0 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61 20 63  ses of doing a c
15800 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a  omparison..**.**
15810 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20   A record is an 
15820 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74  object that cont
15830 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
15840 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e   fields of data.
15850 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20  .** Records are 
15860 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
15870 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74  e content of a t
15880 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20  able row and to 
15890 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79  store.** the key
158a0 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41   of an index.  A
158b0 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f   blob encoding o
158c0 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72  f a record is cr
158d0 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  eated by.** the 
158e0 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  OP_MakeRecord op
158f0 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45  code of the VDBE
15900 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d   and is disassem
15910 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f  bled by the.** O
15920 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
15930 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  .**.** An instan
15940 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
15950 74 20 73 65 72 76 65 73 20 61 73 20 61 20 22 6b  t serves as a "k
15960 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20 61 20  ey" for doing a 
15970 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20  search on.** an 
15980 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20 54 68  index b+tree. Th
15990 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20 73 65  e goal of the se
159a0 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e 64 20  arch is to find 
159b0 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  the entry that.*
159c0 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f 20 74  * is closed to t
159d0 68 65 20 6b 65 79 20 64 65 73 63 72 69 62 65 64  he key described
159e0 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63 74 2e   by this object.
159f0 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 6d 69    This object mi
15a00 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74  ght hold.** just
15a10 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
15a20 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d 62 65   key.  The numbe
15a30 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73 20 67  r of fields is g
15a40 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49  iven by.** pKeyI
15a50 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a  nfo->nField..**.
15a60 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32  ** The r1 and r2
15a70 20 66 69 65 6c 64 73 20 61 72 65 20 74 68 65 20   fields are the 
15a80 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75 72 6e  values to return
15a90 20 69 66 20 74 68 69 73 20 6b 65 79 20 69 73 20   if this key is 
15aa0 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20  less than.** or 
15ab0 67 72 65 61 74 65 72 20 74 68 61 6e 20 61 20 6b  greater than a k
15ac0 65 79 20 69 6e 20 74 68 65 20 62 74 72 65 65 2c  ey in the btree,
15ad0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
15ae0 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c  These are normal
15af0 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20  ly.** -1 and +1 
15b00 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 62 75  respectively, bu
15b10 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76 65 72  t might be inver
15b20 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31  ted to +1 and -1
15b30 20 69 66 20 74 68 65 20 62 2d 74 72 65 65 0a 2a   if the b-tree.*
15b40 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f 72 64  * is in DESC ord
15b50 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65  er..**.** The ke
15b60 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e  y comparison fun
15b70 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20  ctions actually 
15b80 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 5f 72  return default_r
15b90 63 20 77 68 65 6e 20 74 68 65 79 20 66 69 6e 64  c when they find
15ba0 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20 63 6f  .** an equals co
15bb0 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66 61 75  mparison.  defau
15bc0 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d 31 2c  lt_rc can be -1,
15bd0 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20 74   0, or +1.  If t
15be0 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74  here are.** mult
15bf0 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20  iple entries in 
15c00 74 68 65 20 62 2d 74 72 65 65 20 77 69 74 68 20  the b-tree with 
15c10 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28 77 68  the same key (wh
15c20 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a  en only looking.
15c30 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73 74 20  ** at the first 
15c40 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
15c50 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75 6c 74  s,) then default
15c60 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74 20 74  _rc can be set t
15c70 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75 73 65  o -1 to.** cause
15c80 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 20 66   the search to f
15c90 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d 61 74  ind the last mat
15ca0 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61 75  ch, or +1 to cau
15cb0 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
15cc0 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66 69 72  .** find the fir
15cd0 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20  st match..**.** 
15ce0 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73  The key comparis
15cf0 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c  on functions wil
15d00 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74 6f 20  l set eqSeen to 
15d10 74 72 75 65 20 69 66 20 74 68 65 79 20 65 76 65  true if they eve
15d20 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65 71 75  r.** get and equ
15d30 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20  al results when 
15d40 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73 20 73  comparing this s
15d50 74 72 75 63 74 75 72 65 20 74 6f 20 61 20 62 2d  tructure to a b-
15d60 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  tree record..** 
15d70 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 21  When default_rc!
15d80 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68 20 6d  =0, the search m
15d90 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e 20 74  ight end up on t
15da0 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69  he record immedi
15db0 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20  ately.** before 
15dc0 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 20  the first match 
15dd0 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61  or immediately a
15de0 66 74 65 72 20 74 68 65 20 6c 61 73 74 20 6d 61  fter the last ma
15df0 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53  tch.  The.** eqS
15e00 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20 69  een field will i
15e10 6e 64 69 63 61 74 65 20 77 68 65 74 68 65 72 20  ndicate whether 
15e20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20  or not an exact 
15e30 6d 61 74 63 68 20 65 78 69 73 74 73 20 69 6e 20  match exists in 
15e40 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a  the.** b-tree..*
15e50 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
15e60 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
15e70 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
15e80 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
15e90 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
15ea0 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d  rmation */.  Mem
15eb0 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
15ec0 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20   /* Values */.  
15ed0 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
15ee0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15ef0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
15f00 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61  m[] */.  i8 defa
15f10 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20  ult_rc;      /* 
15f20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
15f30 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71  t if keys are eq
15f40 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43  ual */.  u8 errC
15f50 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ode;         /* 
15f60 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62  Error detected b
15f70 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  y xRecordCompare
15f80 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d   (CORRUPT or NOM
15f90 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20  EM) */.  i8 r1; 
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15fb0 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
15fc0 69 66 20 28 6c 68 73 20 3c 20 72 68 73 29 20 2a  if (lhs < rhs) *
15fd0 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20 20 20  /.  i8 r2;      
15fe0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
15ff0 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
16000 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 75  hs > rhs) */.  u
16010 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20 20 20  8 eqSeen;       
16020 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e     /* True if an
16030 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70 61 72   equality compar
16040 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65  ison has been se
16050 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a  en */.};.../*.**
16060 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20   Each SQL index 
16070 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
16080 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a  n memory by an.*
16090 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
160a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
160b0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  cture..**.** The
160c0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
160d0 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74  table that are t
160e0 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65  o be indexed are
160f0 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79   described.** by
16100 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20   the aiColumn[] 
16110 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74  field of this st
16120 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78  ructure.  For ex
16130 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a  ample, suppose.*
16140 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f  * we have the fo
16150 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e  llowing table an
16160 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20  d index:.**.**  
16170 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
16180 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69  Ex1(c1 int, c2 i
16190 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a  nt, c3 text);.**
161a0 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
161b0 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c  X Ex2 ON Ex1(c3,
161c0 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  c1);.**.** In th
161d0 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
161e0 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31  e describing Ex1
161f0 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73  , nCol==3 becaus
16200 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74  e there are.** t
16210 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  hree columns in 
16220 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74  the table.  In t
16230 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  he Index structu
16240 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a  re describing.**
16250 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32   Ex2, nColumn==2
16260 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20   since 2 of the 
16270 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31  3 columns of Ex1
16280 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a   are indexed..**
16290 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69   The value of ai
162a0 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d  Column is {2, 0}
162b0 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d  .  aiColumn[0]==
162c0 32 20 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a  2 because the.**
162d0 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f   first column to
162e0 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29   be indexed (c3)
162f0 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
16300 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d   2 in Ex1.aCol[]
16310 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20  ..** The second 
16320 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
16330 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e  exed (c1) has an
16340 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a   index of 0 in.*
16350 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65  * Ex1.aCol[], he
16360 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e  nce Ex2.aiColumn
16370 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  [1]==0..**.** Th
16380 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  e Index.onError 
16390 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73  field determines
163a0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
163b0 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
163c0 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75  mns.** must be u
163d0 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74  nique and what t
163e0 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65  o do if they are
163f0 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65   not.  When Inde
16400 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e  x.onError=OE_Non
16410 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74  e,.** it means t
16420 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69  his is not a uni
16430 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65  que index.  Othe
16440 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e  rwise it is a un
16450 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e  ique index.** an
16460 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49  d the value of I
16470 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64  ndex.onError ind
16480 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20  icate the which 
16490 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
164a0 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d  ion.** algorithm
164b0 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65   to employ whene
164c0 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ver an attempt i
164d0 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74  s made to insert
164e0 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a   a non-unique.**
164f0 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20   element..**.** 
16500 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20  While parsing a 
16510 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20  CREATE TABLE or 
16520 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
16530 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20  tement in order 
16540 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56  to.** generate V
16550 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70  DBE code (as opp
16560 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20  osed to parsing 
16570 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e  one read from an
16580 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a   sqlite_master.*
16590 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72 74 20  * table as part 
165a0 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78  of parsing an ex
165b0 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
165c0 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65  schema), transie
165d0 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20  nt instances.** 
165e0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
165f0 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64  e may be created
16600 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
16610 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61  he Index.tnum va
16620 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65  riable is.** use
16630 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61  d to store the a
16640 64 64 72 65 73 73 20 6f 66 20 61 20 56 44 42 45  ddress of a VDBE
16650 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f   instruction, no
16660 74 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67  t a database pag
16670 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20  e.** number (it 
16680 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74  cannot - the dat
16690 61 62 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f  abase page is no
166a0 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69  t allocated unti
166b0 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72  l the VDBE.** pr
166c0 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75 74 65  ogram is execute
166d0 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54  d). See convertT
166e0 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62  oWithoutRowidTab
166f0 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  le() for details
16700 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
16710 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
16720 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
16730 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
16740 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61  ndex */.  i16 *a
16750 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
16760 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
16770 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
16780 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
16790 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73   is 0 */.  LogEs
167a0 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20  t *aiRowLogEst; 
167b0 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
167c0 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
167d0 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
167e0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
167f0 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
16800 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
16810 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
16820 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
16830 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
16840 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
16850 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
16860 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
16870 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
16880 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
16890 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
168a0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
168b0 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
168c0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
168d0 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
168e0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
168f0 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
16900 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
16910 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
16920 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
16930 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
16940 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73  e==ASC */.  cons
16950 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b  t char **azColl;
16960 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
16970 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
16980 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
16990 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
169a0 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20  PartIdxWhere;   
169b0 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
169c0 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
169d0 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  dices */.  ExprL
169e0 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20  ist *aColExpr;  
169f0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78      /* Column ex
16a00 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
16a10 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
16a20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61          /* DB Pa
16a30 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f  ge containing ro
16a40 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  ot of this index
16a50 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49   */.  LogEst szI
16a60 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f  dxRow;         /
16a70 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72  * Estimated aver
16a80 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20  age row size in 
16a90 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  bytes */.  u16 n
16aa0 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  KeyCol;         
16ab0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16ac0 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67   columns forming
16ad0 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31   the key */.  u1
16ae0 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 nColumn;      
16af0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16b00 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72   of columns stor
16b10 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ed in the index 
16b20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b  */.  u8 onError;
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16b40 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
16b50 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
16b60 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
16b70 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79    unsigned idxTy
16b80 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 30 3a  pe:2;      /* 0:
16b90 4e 6f 72 6d 61 6c 20 31 3a 55 4e 49 51 55 45 2c  Normal 1:UNIQUE,
16ba0 20 32 3a 50 52 49 4d 41 52 59 20 4b 45 59 2c 20   2:PRIMARY KEY, 
16bb0 33 3a 49 50 4b 20 2a 2f 0a 20 20 75 6e 73 69 67  3:IPK */.  unsig
16bc0 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
16bd0 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
16be0 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
16bf0 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
16c00 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e  */.  unsigned un
16c10 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a  iqNotNull:1;  /*
16c20 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20   True if UNIQUE 
16c30 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72  and NOT NULL for
16c40 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   all columns */.
16c50 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73    unsigned isRes
16c60 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72  ized:1;    /* Tr
16c70 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65  ue if resizeInde
16c80 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65  xObject() has be
16c90 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75  en called */.  u
16ca0 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69  nsigned isCoveri
16cb0 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ng:1;   /* True 
16cc0 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76  if this is a cov
16cd0 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  ering index */. 
16ce0 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70   unsigned noSkip
16cf0 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20  Scan:1;   /* Do 
16d00 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73  not try to use s
16d10 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65  kip-scan if true
16d20 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68   */.  unsigned h
16d30 61 73 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f  asStat1:1;     /
16d40 2a 20 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61  * aiRowLogEst va
16d50 6c 75 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73  lues come from s
16d60 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 20  qlite_stat1 */. 
16d70 20 75 6e 73 69 67 6e 65 64 20 62 4e 6f 51 75 65   unsigned bNoQue
16d80 72 79 3a 31 3b 20 20 20 20 20 2f 2a 20 44 6f 20  ry:1;     /* Do 
16d90 6e 6f 74 20 75 73 65 20 74 68 69 73 20 69 6e 64  not use this ind
16da0 65 78 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71  ex to optimize q
16db0 75 65 72 69 65 73 20 2a 2f 0a 23 69 66 64 65 66  ueries */.#ifdef
16dc0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
16dd0 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20  TAT3_OR_STAT4.  
16de0 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20  int nSample;    
16df0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16e00 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
16e10 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20  n aSample[] */. 
16e20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b   int nSampleCol;
16e30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
16e40 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65  e of IndexSample
16e50 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f  .anEq[] and so o
16e60 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  n */.  tRowcnt *
16e70 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20  aAvgEq;         
16e80 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76  /* Average nEq v
16e90 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e  alues for keys n
16ea0 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
16eb0 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
16ec0 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
16ed0 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
16ee0 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20  ft-most key */. 
16ef0 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45   tRowcnt *aiRowE
16f00 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  st;       /* Non
16f10 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61  -logarithmic sta
16f20 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73  t1 data for this
16f30 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77   index */.  tRow
16f40 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20  cnt nRowEst0;   
16f50 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
16f60 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f  rithmic number o
16f70 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
16f80 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  dex */.#endif.  
16f90 42 69 74 6d 61 73 6b 20 63 6f 6c 4e 6f 74 49 64  Bitmask colNotId
16fa0 78 65 64 3b 20 20 20 20 20 2f 2a 20 30 20 66 6f  xed;     /* 0 fo
16fb0 72 20 75 6e 69 6e 64 65 78 65 64 20 63 6f 6c 75  r unindexed colu
16fc0 6d 6e 73 20 69 6e 20 70 54 61 62 20 2a 2f 0a 7d  mns in pTab */.}
16fd0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
16fe0 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65   values for Inde
16ff0 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65  x.idxType.*/.#de
17000 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
17010 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20  YPE_APPDEF      
17020 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75  0   /* Created u
17030 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45  sing CREATE INDE
17040 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  X */.#define SQL
17050 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51  ITE_IDXTYPE_UNIQ
17060 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49  UE      1   /* I
17070 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51  mplements a UNIQ
17080 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  UE constraint */
17090 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
170a0 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
170b0 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68  EY  2   /* Is th
170c0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f  e PRIMARY KEY fo
170d0 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23  r the table */.#
170e0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
170f0 58 54 59 50 45 5f 49 50 4b 20 20 20 20 20 20 20  XTYPE_IPK       
17100 20 20 33 20 20 20 2f 2a 20 49 4e 54 45 47 45 52    3   /* INTEGER
17110 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64   PRIMARY KEY ind
17120 65 78 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e  ex */../* Return
17130 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
17140 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45   is a PRIMARY KE
17150 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  Y index */.#defi
17160 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49  ne IsPrimaryKeyI
17170 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69  ndex(X)  ((X)->i
17180 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49  dxType==SQLITE_I
17190 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
171a0 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  Y)../* Return tr
171b0 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
171c0 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20   a UNIQUE index 
171d0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69  */.#define IsUni
171e0 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20  queIndex(X)     
171f0 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d   ((X)->onError!=
17200 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65  OE_None)../* The
17210 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b   Index.aiColumn[
17220 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72  ] values are nor
17230 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69  mally positive i
17240 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20  nteger.  But.** 
17250 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e  there are some n
17260 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 74  egative values t
17270 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61 6c  hat have special
17280 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65   meaning:.*/.#de
17290 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20  fine XN_ROWID   
172a0 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e    (-1)     /* In
172b0 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
172c0 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  the rowid */.#de
172d0 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20  fine XN_EXPR    
172e0 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e    (-2)     /* In
172f0 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
17300 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  an expression */
17310 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d  ../*.** Each sam
17320 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ple stored in th
17330 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
17340 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
17350 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a  ted in memory.**
17360 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75   using a structu
17370 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e  re of this type.
17380 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74    See documentat
17390 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ion at the top o
173a0 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65  f the.** analyze
173b0 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  .c source file f
173c0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
173d0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
173e0 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
173f0 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20   {.  void *p;   
17400 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
17410 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63  r to sampled rec
17420 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ord */.  int n; 
17430 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
17440 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20  ze of record in 
17450 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63  bytes */.  tRowc
17460 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20  nt *anEq;    /* 
17470 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
17480 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
17490 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
174a0 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
174b0 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45  t *anLt;    /* E
174c0 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
174d0 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
174e0 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
174f0 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
17500 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20  nt *anDLt;   /* 
17510 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
17520 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
17530 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
17540 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
17550 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
17560 74 6f 20 75 73 65 20 77 69 74 68 69 6e 20 74 68  to use within th
17570 65 20 66 6c 61 67 73 20 61 72 67 75 6d 65 6e 74  e flags argument
17580 20 74 6f 20 73 71 6c 69 74 65 33 47 65 74 54 6f   to sqlite3GetTo
17590 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ken()..*/.#defin
175a0 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f 51  e SQLITE_TOKEN_Q
175b0 55 4f 54 45 44 20 20 20 20 30 78 31 20 2f 2a 20  UOTED    0x1 /* 
175c0 54 6f 6b 65 6e 20 69 73 20 61 20 71 75 6f 74 65  Token is a quote
175d0 64 20 69 64 65 6e 74 69 66 69 65 72 2e 20 2a 2f  d identifier. */
175e0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
175f0 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52 44 20 20 20  TOKEN_KEYWORD   
17600 30 78 32 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20  0x2 /* Token is 
17610 61 20 6b 65 79 77 6f 72 64 2e 20 2a 2f 0a 0a 2f  a keyword. */../
17620 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20  *.** Each token 
17630 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68  coming out of th
17640 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e  e lexer is an in
17650 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
17660 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f  s structure.  To
17670 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73  kens are also us
17680 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
17690 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a   expression..**.
176a0 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 74 68  ** The memory th
176b0 61 74 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f  at "z" points to
176c0 20 69 73 20 6f 77 6e 65 64 20 62 79 20 6f 74 68   is owned by oth
176d0 65 72 20 6f 62 6a 65 63 74 73 2e 20 20 54 61 6b  er objects.  Tak
176e0 65 20 63 61 72 65 0a 2a 2a 20 74 68 61 74 20 74  e care.** that t
176f0 68 65 20 6f 77 6e 65 72 20 6f 66 20 74 68 65 20  he owner of the 
17700 22 7a 22 20 73 74 72 69 6e 67 20 64 6f 65 73 20  "z" string does 
17710 6e 6f 74 20 64 65 61 6c 6c 6f 63 61 74 65 20 74  not deallocate t
17720 68 65 20 73 74 72 69 6e 67 20 62 65 66 6f 72 65  he string before
17730 0a 2a 2a 20 74 68 65 20 54 6f 6b 65 6e 20 67 6f  .** the Token go
17740 65 73 20 6f 75 74 20 6f 66 20 73 63 6f 70 65 21  es out of scope!
17750 20 20 56 65 72 79 20 6f 66 74 65 6e 2c 20 74 68    Very often, th
17760 65 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f 20  e "z" points to 
17770 73 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a 20 69 6e  some place.** in
17780 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 74   the middle of t
17790 68 65 20 50 61 72 73 65 2e 7a 53 71 6c 20 74 65  he Parse.zSql te
177a0 78 74 2e 20 20 42 75 74 20 69 74 20 6d 69 67 68  xt.  But it migh
177b0 74 20 61 6c 73 6f 20 70 6f 69 6e 74 20 74 6f 20  t also point to 
177c0 61 0a 2a 2a 20 73 74 61 74 69 63 20 73 74 72 69  a.** static stri
177d0 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f  ng..*/.struct To
177e0 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ken {.  const ch
177f0 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65  ar *z;     /* Te
17800 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e  xt of the token.
17810 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69    Not NULL-termi
17820 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69  nated! */.  unsi
17830 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f  gned int n;    /
17840 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  * Number of char
17850 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74  acters in this t
17860 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  oken */.};../*.*
17870 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
17880 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
17890 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
178a0 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
178b0 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
178c0 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61  for a SELECT tha
178d0 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  t contains aggre
178e0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  gate functions..
178f0 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70  **.** If Expr.op
17900 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  ==TK_AGG_COLUMN 
17910 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  or TK_AGG_FUNCTI
17920 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67  ON then Expr.pAg
17930 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f  gInfo is a.** po
17940 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
17950 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78  ructure.  The Ex
17960 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64  pr.iColumn field
17970 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e   is the index in
17980 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c  .** AggInfo.aCol
17990 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46  [] or AggInfo.aF
179a0 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61  unc[] of informa
179b0 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
179c0 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
179d0 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a  for that node..*
179e0 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72  *.** AggInfo.pGr
179f0 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66  oupBy and AggInf
17a00 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f  o.aFunc.pExpr po
17a10 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69  int to fields wi
17a20 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67  thin the.** orig
17a30 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75  inal Select stru
17a40 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72  cture that descr
17a50 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20  ibes the SELECT 
17a60 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73  statement.  Thes
17a70 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e  e.** fields do n
17a80 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72  ot need to be fr
17a90 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63  eed when dealloc
17aa0 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66  ating the AggInf
17ab0 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  o structure..*/.
17ac0 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b  struct AggInfo {
17ad0 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65  .  u8 directMode
17ae0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
17af0 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d  rect rendering m
17b00 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64  ode means take d
17b10 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20  ata directly.   
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73         ** from s
17b40 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74  ource tables rat
17b50 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63  her than from ac
17b60 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20  cumulators */.  
17b70 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78  u8 useSortingIdx
17b80 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69  ;       /* In di
17b90 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72  rect mode, refer
17ba0 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67  ence the sorting
17bb0 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20   index rather.  
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bd0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20          ** than 
17be0 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
17bf0 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
17c00 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  gIdx;         /*
17c10 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
17c20 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  f the sorting in
17c30 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  dex */.  int sor
17c40 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20  tingIdxPTab;    
17c50 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
17c60 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c  r of pseudo-tabl
17c70 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74  e */.  int nSort
17c80 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f  ingColumn;     /
17c90 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
17ca0 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69  mns in the sorti
17cb0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
17cc0 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20  t mnReg, mxReg; 
17cd0 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f        /* Range o
17ce0 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
17cf0 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61  cated for aCol a
17d00 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78  nd aFunc */.  Ex
17d10 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
17d20 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f  ;     /* The gro
17d30 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a  up by clause */.
17d40 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
17d50 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72  _col {    /* For
17d60 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65   each column use
17d70 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c  d in source tabl
17d80 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  es */.    Table 
17d90 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
17da0 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62     /* Source tab
17db0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54  le */.    int iT
17dc0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
17dd0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
17de0 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ber of the sourc
17df0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
17e00 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
17e10 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d          /* Colum
17e20 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20  n number within 
17e30 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
17e40 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72   */.    int iSor
17e50 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  terColumn;      
17e60 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
17e70 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  r in the sorting
17e80 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e   index */.    in
17e90 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
17ea0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
17eb0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
17ec0 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
17ed0 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  or */.    Expr *
17ee0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
17ef0 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e     /* The origin
17f00 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  al expression */
17f10 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e  .  } *aCol;.  in
17f20 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t nColumn;      
17f30 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17f40 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20  of used entries 
17f50 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69  in aCol[] */.  i
17f60 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b  nt nAccumulator;
17f70 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17f80 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
17f90 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f   show through to
17fa0 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20   the output..   
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69         ** Additi
17fd0 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65  onal columns are
17fe0 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61   used only as pa
17ff0 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20  rameters to.    
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18010 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61        ** aggrega
18020 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
18030 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
18040 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72  _func {   /* For
18050 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20   each aggregate 
18060 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
18070 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
18080 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
18090 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20  ession encoding 
180a0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
180b0 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75      FuncDef *pFu
180c0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nc;          /* 
180d0 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
180e0 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nction implement
180f0 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
18100 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
18110 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
18120 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
18130 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
18140 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69  r */.    int iDi
18150 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20  stinct;         
18160 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74    /* Ephemeral t
18170 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66  able used to enf
18180 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  orce DISTINCT */
18190 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69  .  } *aFunc;.  i
181a0 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20  nt nFunc;       
181b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
181c0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
181d0 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  Func[] */.};../*
181e0 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
181f0 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e   ynVar is a sign
18200 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68  ed integer, eith
18210 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d  er 16-bit or 32-
18220 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20  bit..** Usually 
18230 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20  it is 16-bits.  
18240 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41  But if SQLITE_MA
18250 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
18260 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20  R is greater.** 
18270 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61  than 32767 we ha
18280 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32  ve to make it 32
18290 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73  -bit.  16-bit is
182a0 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75   preferred becau
182b0 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65  se.** it uses le
182c0 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65  ss memory in the
182d0 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68   Expr object, wh
182e0 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d  ich is a big mem
182f0 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73  ory user.** in s
18300 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73  ystems with lots
18310 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61   of prepared sta
18320 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65  tements.  And fe
18330 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a  w applications.*
18340 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e  * need more than
18350 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20   about 10 or 20 
18360 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20  variables.  But 
18370 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65  some extreme use
18380 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61  rs want.** to ha
18390 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ve prepared stat
183a0 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72  ements with over
183b0 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73   32767 variables
183c0 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a  , and for them.*
183d0 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20  * the option is 
183e0 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f  available (at co
183f0 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a  mpile-time)..*/.
18400 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56  #if SQLITE_MAX_V
18410 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d  ARIABLE_NUMBER<=
18420 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31  32767.typedef i1
18430 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74  6 ynVar;.#else.t
18440 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72  ypedef int ynVar
18450 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
18460 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20  Each node of an 
18470 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
18480 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20  e parse tree is 
18490 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
184a0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
184b0 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20  ..**.** Expr.op 
184c0 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54  is the opcode. T
184d0 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65  he integer parse
184e0 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72  r token codes ar
184f0 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f  e reused.** as o
18500 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72  pcodes here. For
18510 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61   example, the pa
18520 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f  rser defines TK_
18530 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  GE to be an inte
18540 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72  ger.** code repr
18550 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d  esenting the ">=
18560 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73  " operator. This
18570 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f   same integer co
18580 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20  de is reused.** 
18590 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65  to represent the
185a0 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72   greater-than-or
185b0 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74  -equal-to operat
185c0 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  or in the expres
185d0 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a  sion.** tree..**
185e0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
185f0 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
18600 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45  literal (TK_INTE
18610 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54  GER, TK_FLOAT, T
18620 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b  K_BLOB,.** or TK
18630 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45  _STRING), then E
18640 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
18650 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74  ns the text of t
18660 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20  he SQL literal. 
18670 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  If.** the expres
18680 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62  sion is a variab
18690 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29  le (TK_VARIABLE)
186a0 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
186b0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a  n contains the.*
186c0 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  * variable name.
186d0 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65   Finally, if the
186e0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
186f0 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28  n SQL function (
18700 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a  TK_FUNCTION),.**
18710 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
18720 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61   contains the na
18730 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
18740 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70  on..**.** Expr.p
18750 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70  Right and Expr.p
18760 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66  Left are the lef
18770 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65  t and right sube
18780 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a  xpressions of a.
18790 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ** binary operat
187a0 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f  or. Either or bo
187b0 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a  th may be NULL..
187c0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69  **.** Expr.x.pLi
187d0 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  st is a list of 
187e0 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65  arguments if the
187f0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
18800 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a  n SQL function,.
18810 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73  ** a CASE expres
18820 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78  sion or an IN ex
18830 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
18840 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
18850 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a  <y>, <z>...)"..*
18860 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  * Expr.x.pSelect
18870 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20   is used if the 
18880 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
18890 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e  sub-select or an
188a0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a   expression of.*
188b0 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  * the form "<lhs
188c0 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e  > IN (SELECT ...
188d0 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49  )". If the EP_xI
188e0 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73  sSelect bit is s
188f0 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  et in the.** Exp
18900 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
18910 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  en Expr.x.pSelec
18920 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65  t is valid. Othe
18930 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c  rwise, Expr.x.pL
18940 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e  ist is.** valid.
18950 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73  .**.** An expres
18960 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
18970 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66   ID or ID.ID ref
18980 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ers to a column 
18990 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46  in a table..** F
189a0 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69  or such expressi
189b0 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20  ons, Expr.op is 
189c0 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e  set to TK_COLUMN
189d0 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65   and Expr.iTable
189e0 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67   is.** the integ
189f0 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  er cursor number
18a00 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f   of a VDBE curso
18a10 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
18a20 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20  at table and.** 
18a30 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20  Expr.iColumn is 
18a40 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
18a50 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  r for the specif
18a60 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  ic column.  If t
18a70 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  he.** expression
18a80 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65   is used as a re
18a90 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65  sult in an aggre
18aa0 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65  gate SELECT, the
18ab0 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
18ac0 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e  s also stored in
18ad0 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63   the Expr.iAgg c
18ae0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67  olumn in the agg
18af0 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a  regate so that.*
18b00 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65  * it can be acce
18b10 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61  ssed after all a
18b20 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f  ggregates are co
18b30 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mputed..**.** If
18b40 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18b50 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61  is an unbound va
18b60 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61  riable marker (a
18b70 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a   question mark.*
18b80 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20  * character '?' 
18b90 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  in the original 
18ba0 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78  SQL) then the Ex
18bb0 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20  pr.iTable holds 
18bc0 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d  the index.** num
18bd0 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
18be0 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
18bf0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
18c00 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
18c10 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
18c20 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
18c30 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
18c40 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
18c50 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
18c60 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
18c70 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
18c80 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
18c90 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
18ca0 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
18cb0 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
18cc0 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
18cd0 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
18ce0 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
18cf0 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
18d00 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
18d10 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
18d20 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
18d30 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
18d40 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
18d50 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
18d60 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
18d70 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
18d80 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
18d90 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
18da0 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
18db0 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
18dc0 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
18dd0 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
18de0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
18df0 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
18e00 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
18e10 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
18e20 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
18e30 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
18e40 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
18e50 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
18e60 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
18e70 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
18e80 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
18e90 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
18ea0 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
18eb0 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
18ec0 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
18ed0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
18ee0 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
18ef0 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
18f00 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
18f10 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
18f20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
18f30 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
18f40 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
18f50 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
18f60 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
18f70 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
18f80 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
18f90 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
18fa0 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
18fb0 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
18fc0 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
18fd0 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
18fe0 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
18ff0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
19000 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
19010 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
19020 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
19030 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
19040 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
19050 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
19060 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
19070 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
19080 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
19090 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
190a0 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
190b0 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
190c0 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
190d0 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
190e0 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
190f0 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
19100 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19120 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
19130 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
19140 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
19150 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
19160 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
19170 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
19180 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
19190 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  umn */.  u32 fla
191a0 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
191b0 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
191c0 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
191d0 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
191e0 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
191f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
19200 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
19210 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
19220 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
19230 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
19240 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
19250 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
19260 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
19270 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
19280 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
19290 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
192a0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
192b0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
192c0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
192d0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
192e0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
192f0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
19300 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
19310 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
19320 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
19330 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
19340 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
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 2a 2a 2f 0a 0a 20 20  ***********/..  
19390 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
193a0 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
193b0 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
193c0 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
193d0 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
193e0 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
193f0 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
19400 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20  List;     /* op 
19410 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
19420 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43  LECT, CASE, FUNC
19430 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f  TION, BETWEEN */
19440 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
19450 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f  lect;     /* EP_
19460 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70  xIsSelect and op
19470 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
19480 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a  ELECT */.  } x;.
19490 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
194a0 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20  Reduced flag is 
194b0 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
194c0 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
194d0 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
194e0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
194f0 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
19500 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
19510 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
19520 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
19530 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
19540 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
19550 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
19560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19580 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19590 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
195a0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
195b0 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
195c0 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
195d0 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f       /* Height o
195e0 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65  f the tree heade
195f0 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
19600 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69  /.#endif.  int i
19610 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
19620 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
19630 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
19640 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63   table holding c
19650 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
19670 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72  * TK_REGISTER: r
19680 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20  egister number. 
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52          ** TK_TR
196b0 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c  IGGER: 1 -> new,
196c0 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20   0 -> old.      
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c     ** EP_Unlikel
196f0 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69  y:  134217728 ti
19700 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20  mes likelihood. 
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19720 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45          ** TK_SE
19730 4c 45 43 54 3a 20 31 73 74 20 72 65 67 69 73 74  LECT: 1st regist
19740 65 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65 63  er of result vec
19750 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69  tor */.  ynVar i
19760 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
19770 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  /* TK_COLUMN: co
19780 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20  lumn index.  -1 
19790 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20  for rowid..     
197a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197b0 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42      ** TK_VARIAB
197c0 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d  LE: variable num
197d0 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31  ber (always >= 1
197e0 29 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
197f0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19800 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a  K_SELECT_COLUMN:
19810 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72   column of the r
19820 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a  esult vector */.
19830 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20    i16 iAgg;     
19840 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
19850 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49  h entry in pAggI
19860 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d  nfo->aCol[] or -
19870 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31  >aFunc[] */.  i1
19880 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c  6 iRightJoinTabl
19890 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72  e;   /* If EP_Fr
198a0 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68  omJoin, the righ
198b0 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a  t table of the j
198c0 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b  oin */.  u8 op2;
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  /* TK_REGISTER: 
198f0 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f  original value o
19900 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20  f Expr.op.      
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19920 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     ** TK_COLUMN:
19930 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35   the value of p5
19940 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20   for OP_Column. 
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47          ** TK_AG
19970 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74  G_FUNCTION: nest
19980 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41  ing depth */.  A
19990 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
199a0 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79  ;     /* Used by
199b0 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61   TK_AGG_COLUMN a
199c0 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  nd TK_AGG_FUNCTI
199d0 4f 4e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ON */.  union {.
199e0 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
199f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
19a00 5f 43 4f 4c 55 4d 4e 3a 20 54 61 62 6c 65 20 63  _COLUMN: Table c
19a10 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e  ontaining column
19a20 2e 20 43 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20  . Can be NULL.  
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a40 20 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72 20           ** for 
19a50 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 69  a column of an i
19a60 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78 70 72 65  ndex on an expre
19a70 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 57 69 6e  ssion */.    Win
19a80 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20  dow *pWin;      
19a90 20 20 20 20 2f 2a 20 54 4b 5f 46 55 4e 43 54 49      /* TK_FUNCTI
19aa0 4f 4e 3a 20 57 69 6e 64 6f 77 20 64 65 66 69 6e  ON: Window defin
19ab0 69 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 66 75  ition for the fu
19ac0 6e 63 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  nc */.    struct
19ad0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
19ae0 20 2f 2a 20 54 4b 5f 49 4e 2c 20 54 4b 5f 53 45   /* TK_IN, TK_SE
19af0 4c 45 43 54 2c 20 61 6e 64 20 54 4b 5f 45 58 49  LECT, and TK_EXI
19b00 53 54 53 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74  STS */.      int
19b10 20 69 41 64 64 72 3b 20 20 20 20 20 20 20 20 20   iAddr;         
19b20 20 20 20 20 2f 2a 20 53 75 62 72 6f 75 74 69 6e      /* Subroutin
19b30 65 20 65 6e 74 72 79 20 61 64 64 72 65 73 73 20  e entry address 
19b40 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 72 65 67  */.      int reg
19b50 52 65 74 75 72 6e 3b 20 20 20 20 20 20 20 20 20  Return;         
19b60 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73 65 64  /* Register used
19b70 20 74 6f 20 68 6f 6c 64 20 72 65 74 75 72 6e 20   to hold return 
19b80 61 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 7d  address */.    }
19b90 20 73 75 62 3b 0a 20 20 7d 20 79 3b 0a 7d 3b 0a   sub;.  } y;.};.
19ba0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
19bb0 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61  wing are the mea
19bc0 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e  nings of bits in
19bd0 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
19be0 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
19bf0 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30  e EP_FromJoin  0
19c00 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69  x000001 /* Origi
19c10 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e  nates in ON/USIN
19c20 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65  G clause of oute
19c30 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
19c40 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30  e EP_Agg       0
19c50 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61  x000002 /* Conta
19c60 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
19c70 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
19c80 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ons */.#define E
19c90 50 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30 30  P_HasFunc   0x00
19ca0 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0004 /* Contains
19cb0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e   one or more fun
19cc0 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69  ctions of any ki
19cd0 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nd */.#define EP
19ce0 5f 46 69 78 65 64 43 6f 6c 20 20 30 78 30 30 30  _FixedCol  0x000
19cf0 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e  008 /* TK_Column
19d00 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 66 69   with a known fi
19d10 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a 23 64 65  xed value */.#de
19d20 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74  fine EP_Distinct
19d30 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67    0x000010 /* Ag
19d40 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
19d50 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b   with DISTINCT k
19d60 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
19d70 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
19d80 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
19d90 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
19da0 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
19db0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
19dc0 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
19dd0 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
19de0 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
19df0 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
19e00 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
19e10 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
19e20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
19e30 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
19e40 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
19e50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
19e60 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
19e70 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
19e80 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  E operator */.#d
19e90 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63  efine EP_Generic
19ea0 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49     0x000200 /* I
19eb0 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72  gnore COLLATE or
19ec0 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69   affinity on thi
19ed0 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  s tree */.#defin
19ee0 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30  e EP_IntValue  0
19ef0 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67  x000400 /* Integ
19f00 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  er value contain
19f10 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a  ed in u.iValue *
19f20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73  /.#define EP_xIs
19f30 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20  Select 0x000800 
19f40 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20  /* x.pSelect is 
19f50 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65  valid (otherwise
19f60 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a   x.pList is) */.
19f70 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20  #define EP_Skip 
19f80 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
19f90 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72   COLLATE, AS, or
19fa0 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65   UNLIKELY */.#de
19fb0 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
19fc0 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
19fd0 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
19fe0 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
19ff0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1a000 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78   EP_TokenOnly 0x
1a010 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
1a020 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
1a030 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
1a040 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
1a050 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30  P_Static    0x00
1a060 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20  8000 /* Held in 
1a070 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69  memory not obtai
1a080 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
1a090 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
1a0a0 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30  MemToken  0x0100
1a0b0 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
1a0c0 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
1a0d0 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
1a0e0 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
1a0f0 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
1a100 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
1a110 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
1a120 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
1a130 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f  kely  0x040000 /
1a140 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20  * unlikely() or 
1a150 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e  likelihood() fun
1a160 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
1a170 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78   EP_ConstFunc 0x
1a180 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49  080000 /* A SQLI
1a190 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
1a1a0 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e   or _SLOCHNG fun
1a1b0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
1a1c0 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78   EP_CanBeNull 0x
1a1d0 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65  100000 /* Can be
1a1e0 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f   null despite NO
1a1f0 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
1a200 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
1a210 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30  Subquery  0x2000
1a220 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
1a230 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20  ins a TK_SELECT 
1a240 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
1a250 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20  ine EP_Alias    
1a260 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20   0x400000 /* Is 
1a270 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72  an alias for a r
1a280 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
1a290 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c   */.#define EP_L
1a2a0 65 61 66 20 20 20 20 20 20 30 78 38 30 30 30 30  eaf      0x80000
1a2b0 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c  0 /* Expr.pLeft,
1a2c0 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65   .pRight, .u.pSe
1a2d0 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f  lect all NULL */
1a2e0 0a 23 64 65 66 69 6e 65 20 45 50 5f 57 69 6e 46  .#define EP_WinF
1a2f0 75 6e 63 20 20 30 78 31 30 30 30 30 30 30 20 2f  unc  0x1000000 /
1a300 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20 77 69  * TK_FUNCTION wi
1a310 74 68 20 45 78 70 72 2e 79 2e 70 57 69 6e 20 73  th Expr.y.pWin s
1a320 65 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  et */.#define EP
1a330 5f 53 75 62 72 74 6e 20 20 20 30 78 32 30 30 30  _Subrtn   0x2000
1a340 30 30 30 20 2f 2a 20 55 73 65 73 20 45 78 70 72  000 /* Uses Expr
1a350 2e 79 2e 73 75 62 2e 20 54 4b 5f 49 4e 2c 20 5f  .y.sub. TK_IN, _
1a360 53 45 4c 45 43 54 2c 20 6f 72 20 5f 45 58 49 53  SELECT, or _EXIS
1a370 54 53 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  TS */.#define EP
1a380 5f 51 75 6f 74 65 64 20 20 20 30 78 34 30 30 30  _Quoted   0x4000
1a390 30 30 30 20 2f 2a 20 54 4b 5f 49 44 20 77 61 73  000 /* TK_ID was
1a3a0 20 6f 72 69 67 69 6e 61 6c 6c 79 20 71 75 6f 74   originally quot
1a3b0 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ed */../*.** The
1a3c0 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 6d 61   EP_Propagate ma
1a3d0 73 6b 20 69 73 20 61 20 73 65 74 20 6f 66 20 70  sk is a set of p
1a3e0 72 6f 70 65 72 74 69 65 73 20 74 68 61 74 20 61  roperties that a
1a3f0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72 6f  utomatically pro
1a400 70 61 67 61 74 65 0a 2a 2a 20 75 70 77 61 72 64  pagate.** upward
1a410 73 20 69 6e 74 6f 20 70 61 72 65 6e 74 20 6e 6f  s into parent no
1a420 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  des..*/.#define 
1a430 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50  EP_Propagate (EP
1a440 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71  _Collate|EP_Subq
1a450 75 65 72 79 7c 45 50 5f 48 61 73 46 75 6e 63 29  uery|EP_HasFunc)
1a460 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
1a470 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
1a480 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
1a490 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
1a4a0 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  the.** Expr.flag
1a4b0 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
1a4c0 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65  ine ExprHasPrope
1a4d0 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28  rty(E,P)     (((
1a4e0 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  E)->flags&(P))!=
1a4f0 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  0).#define ExprH
1a500 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c  asAllProperty(E,
1a510 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  P)  (((E)->flags
1a520 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
1a530 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ine ExprSetPrope
1a540 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29  rty(E,P)     (E)
1a550 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
1a560 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72  fine ExprClearPr
1a570 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45  operty(E,P)   (E
1a580 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  )->flags&=~(P)..
1a590 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56  /* The ExprSetVV
1a5a0 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72  AProperty() macr
1a5b0 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65  o is used for Ve
1a5c0 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69  rification, Vali
1a5d0 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41  dation,.** and A
1a5e0 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c  ccreditation onl
1a5f0 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b  y.  It works lik
1a600 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
1a610 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a  y() during VVA.*
1a620 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20  * processes but 
1a630 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64  is a no-op for d
1a640 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64  elivery..*/.#ifd
1a650 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1a660 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
1a670 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
1a680 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
1a690 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1a6a0 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
1a6b0 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a  rty(E,P).#endif.
1a6c0 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
1a6d0 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
1a6e0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
1a6f0 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72  equired by a nor
1a700 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75  mal Expr.** stru
1a710 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75  ct, an Expr stru
1a720 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52  ct with the EP_R
1a730 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20  educed flag set 
1a740 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a  in Expr.flags.**
1a750 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72   and an Expr str
1a760 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
1a770 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73  TokenOnly flag s
1a780 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  et..*/.#define E
1a790 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20  XPR_FULLSIZE    
1a7a0 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78         sizeof(Ex
1a7b0 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr)           /*
1a7c0 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64   Full size */.#d
1a7d0 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43  efine EXPR_REDUC
1a7e0 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66  EDSIZE        of
1a7f0 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62  fsetof(Expr,iTab
1a800 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66  le)  /* Common f
1a810 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69  eatures */.#defi
1a820 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ne EXPR_TOKENONL
1a830 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65  YSIZE      offse
1a840 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20  tof(Expr,pLeft) 
1a850 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75    /* Fewer featu
1a860 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c  res */../*.** Fl
1a870 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  ags passed to th
1a880 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
1a890 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65  () function. See
1a8a0 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
1a8b0 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c  ent.** above sql
1a8c0 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f  ite3ExprDup() fo
1a8d0 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64  r details..*/.#d
1a8e0 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45  efine EXPRDUP_RE
1a8f0 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30  DUCE         0x0
1a900 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64  001  /* Used red
1a910 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e  uced-size Expr n
1a920 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  odes */../*.** A
1a930 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
1a940 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72  ions.  Each expr
1a950 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f  ession may optio
1a960 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20  nally have a.** 
1a970 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e  name.  An expr/n
1a980 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ame combination 
1a990 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73  can be used in s
1a9a0 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63  everal ways, suc
1a9b0 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74  h.** as the list
1a9c0 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22   of "expr AS ID"
1a9d0 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e   fields followin
1a9e0 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20  g a "SELECT" or 
1a9f0 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f  in the.** list o
1aa00 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74  f "ID = expr" it
1aa10 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45  ems in an UPDATE
1aa20 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  .  A list of exp
1aa30 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20  ressions can.** 
1aa40 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20  also be used as 
1aa50 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
1aa60 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77  a function, in w
1aa70 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e  hich case the a.
1aa80 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69  zName.** field i
1aa90 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
1aaa0 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65  * By default the
1aab0 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c   Expr.zSpan fiel
1aac0 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d  d holds a human-
1aad0 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70  readable descrip
1aae0 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65  tion of.** the e
1aaf0 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
1ab00 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  s used in the ge
1ab10 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f  neration of erro
1ab20 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a  r messages and.*
1ab30 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e  * column labels.
1ab40 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
1ab50 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79  Expr.zSpan is ty
1ab60 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74  pically the text
1ab70 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20   of a.** column 
1ab80 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74  expression as it
1ab90 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c   exists in a SEL
1aba0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
1abb0 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74  However, if.** t
1abc0 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c  he bSpanIsTab fl
1abd0 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
1abe0 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61  zSpan is overloa
1abf0 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20  ded to mean the 
1ac00 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72  name.** of the r
1ac10 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20  esult column in 
1ac20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41  the form: DATABA
1ac30 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e  SE.TABLE.COLUMN.
1ac40 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20    This later.** 
1ac50 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72  form is used for
1ac60 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   name resolution
1ac70 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f   with nested FRO
1ac80 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74  M clauses..*/.st
1ac90 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a  ruct ExprList {.
1aca0 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20    int nExpr;    
1acb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1acc0 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  er of expression
1acd0 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
1ace0 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69  .  struct ExprLi
1acf0 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72  st_item { /* For
1ad00 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
1ad10 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
1ad20 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
1ad30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ad40 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
1ad50 72 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  r this expressio
1ad60 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
1ad70 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1ad80 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69   /* Token associ
1ad90 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65  ated with this e
1ada0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
1adb0 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
1adc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67           /* Orig
1add0 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65  inal text of the
1ade0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
1adf0 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b     u8 sortOrder;
1ae00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20             /* 1 
1ae10 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f  for DESC or 0 fo
1ae20 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73  r ASC */.    uns
1ae30 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20  igned done :1;  
1ae40 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74       /* A flag t
1ae50 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20  o indicate when 
1ae60 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69  processing is fi
1ae70 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e  nished */.    un
1ae80 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61  signed bSpanIsTa
1ae90 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68  b :1; /* zSpan h
1aea0 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f  olds DB.TABLE.CO
1aeb0 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69  LUMN */.    unsi
1aec0 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31  gned reusable :1
1aed0 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  ;   /* Constant 
1aee0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65  expression is re
1aef0 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e  usable */.    un
1af00 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72 52 65  signed bSorterRe
1af10 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20 65  f :1; /* Defer e
1af20 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c 20  valuation until 
1af30 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20 2a 2f  after sorting */
1af40 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
1af50 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
1af60 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79      u16 iOrderBy
1af70 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72  Col;      /* For
1af80 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
1af90 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
1afa0 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20  lt set */.      
1afb0 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
1afc0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1afd0 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69   into Parse.aAli
1afe0 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a  as[] for zName *
1aff0 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20  /.      } x;.   
1b000 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70     int iConstExp
1b010 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65  rReg;      /* Re
1b020 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20  gister in which 
1b030 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61  Expr value is ca
1b040 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b  ched */.    } u;
1b050 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
1b060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1b070 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68  ne slot for each
1b080 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
1b090 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
1b0a0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1b0b0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
1b0c0 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69  re can hold a si
1b0d0 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65  mple list of ide
1b0e0 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63  ntifiers,.** suc
1b0f0 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61  h as the list "a
1b100 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c  ,b,c" in the fol
1b110 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
1b120 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e  s:.**.**      IN
1b130 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
1b140 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a  c) VALUES ...;.*
1b150 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  *      CREATE IN
1b160 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62  DEX idx ON t(a,b
1b170 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ,c);.**      CRE
1b180 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67  ATE TRIGGER trig
1b190 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f   BEFORE UPDATE O
1b1a0 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a  N t(a,b,c) ...;.
1b1b0 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74  **.** The IdList
1b1c0 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20  .a.idx field is 
1b1d0 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64  used when the Id
1b1e0 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20  List represents 
1b1f0 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63  the list of.** c
1b200 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65  olumn names afte
1b210 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  r a table name i
1b220 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  n an INSERT stat
1b230 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73  ement.  In the s
1b240 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20  tatement.**.**  
1b250 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1b260 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a  (a,b,c) ....**.*
1b270 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20  * If "a" is the 
1b280 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  k-th column of t
1b290 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49  able "t", then I
1b2a0 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d  dList.a[0].idx==
1b2b0 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c  k..*/.struct IdL
1b2c0 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49  ist {.  struct I
1b2d0 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  dList_item {.   
1b2e0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1b2f0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
1b300 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a  e identifier */.
1b310 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20      int idx;    
1b320 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1b330 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f  n some Table.aCo
1b340 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  l[] of a column 
1b350 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20  named zName */. 
1b360 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64   } *a;.  int nId
1b370 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1b380 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ber of identifie
1b390 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  rs on the list *
1b3a0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1b3b0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1b3c0 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68  ure describes th
1b3d0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
1b3e0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1b3f0 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62  ent..** Each tab
1b400 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
1b410 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
1b420 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20  e is a separate 
1b430 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68  element of.** th
1b440 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72  e SrcList.a[] ar
1b450 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20  ray..**.** With 
1b460 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20  the addition of 
1b470 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
1b480 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66  e support, the f
1b490 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1b4a0 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62  re.** can also b
1b4b0 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69  e used to descri
1b4c0 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  be a particular 
1b4d0 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68  table such as th
1b4e0 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20  e table that.** 
1b4f0 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61  is modified by a
1b500 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
1b510 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  , or UPDATE stat
1b520 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64  ement.  In stand
1b530 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68  ard SQL,.** such
1b540 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65   a table must be
1b550 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20   a simple name: 
1b560 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69  ID.  But in SQLi
1b570 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61  te, the table ca
1b580 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e  n.** now be iden
1b590 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61  tified by a data
1b5a0 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74  base name, a dot
1b5b0 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
1b5c0 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a   name: ID.ID..**
1b5d0 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65  .** The jointype
1b5e0 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77   starts out show
1b5f0 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70  ing the join typ
1b600 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75  e between the cu
1b610 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61  rrent table.** a
1b620 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c  nd the next tabl
1b630 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20  e on the list.  
1b640 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64  The parser build
1b650 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20  s the list this 
1b660 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69  way..** But sqli
1b670 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
1b680 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20  oinType() later 
1b690 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74  shifts the joint
1b6a0 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63  ypes so that eac
1b6b0 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78  h.** jointype ex
1b6c0 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e  presses the join
1b6d0 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62   between the tab
1b6e0 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
1b6f0 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ous table..**.**
1b700 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20   In the colUsed 
1b710 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d  field, the high-
1b720 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36  order bit (bit 6
1b730 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65  3) is set if the
1b740 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69   table.** contai
1b750 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20  ns more than 63 
1b760 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20  columns and the 
1b770 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63  64-th or later c
1b780 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a  olumn is used..*
1b790 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  /.struct SrcList
1b7a0 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20   {.  int nSrc;  
1b7b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b7c0 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  of tables or sub
1b7d0 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46  queries in the F
1b7e0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1b7f0 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  u32 nAlloc;     
1b800 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
1b810 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20  tries allocated 
1b820 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a  in a[] below */.
1b830 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74    struct SrcList
1b840 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65  _item {.    Sche
1b850 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a  ma *pSchema;  /*
1b860 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68   Schema to which
1b870 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69   this item is fi
1b880 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  xed */.    char 
1b890 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20  *zDatabase;  /* 
1b8a0 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
1b8b0 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61   holding this ta
1b8c0 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
1b8d0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
1b8e0 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
1b8f0 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
1b900 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68  Alias;     /* Th
1b910 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20  e "B" part of a 
1b920 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e  "A AS B" phrase.
1b930 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22    zName is the "
1b940 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  A" */.    Table 
1b950 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41  *pTab;      /* A
1b960 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72  n SQL table corr
1b970 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61  esponding to zNa
1b980 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  me */.    Select
1b990 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41   *pSelect;  /* A
1b9a0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1b9b0 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20  t used in place 
1b9c0 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  of a table name 
1b9d0 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46  */.    int addrF
1b9e0 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72  illSub;  /* Addr
1b9f0 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e  ess of subroutin
1ba00 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20  e to manifest a 
1ba10 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20  subquery */.    
1ba20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20  int regReturn;  
1ba30 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1ba40 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64  lding return add
1ba50 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c  ress of addrFill
1ba60 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  Sub */.    int r
1ba70 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20  egResult;    /* 
1ba80 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  Registers holdin
1ba90 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63  g results of a c
1baa0 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
1bab0 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
1bac0 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
1bad0 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
1bae0 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 74  n between this t
1baf0 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
1bb00 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75  vious */.      u
1bb10 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78  nsigned notIndex
1bb20 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  ed :1;    /* Tru
1bb30 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20  e if there is a 
1bb40 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
1bb50 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  se */.      unsi
1bb60 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42 79  gned isIndexedBy
1bb70 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69   :1;   /* True i
1bb80 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e  f there is an IN
1bb90 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
1bba0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1bbb0 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20  d isTabFunc :1; 
1bbc0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
1bbd0 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63  able-valued-func
1bbe0 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20  tion syntax */. 
1bbf0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1bc00 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20  Correlated :1;  
1bc10 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71  /* True if sub-q
1bc20 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74  uery is correlat
1bc30 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ed */.      unsi
1bc40 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
1bc50 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
1bc60 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
1bc70 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75  utine */.      u
1bc80 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73  nsigned isRecurs
1bc90 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  ive :1;   /* Tru
1bca0 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20  e for recursive 
1bcb0 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54  reference in WIT
1bcc0 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 20  H */.    } fg;. 
1bcd0 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20     int iCursor; 
1bce0 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
1bcf0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75   cursor number u
1bd00 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
1bd10 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
1bd20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20  Expr *pOn;      
1bd30 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75    /* The ON clau
1bd40 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
1bd50 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69      IdList *pUsi
1bd60 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49  ng;   /* The USI
1bd70 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
1bd80 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61  oin */.    Bitma
1bd90 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20  sk colUsed;  /* 
1bda0 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74  Bit N (1<<N) set
1bdb0 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20   if column N of 
1bdc0 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a  pTab is used */.
1bdd0 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
1bde0 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64    char *zIndexed
1bdf0 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  By;    /* Identi
1be00 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
1be10 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
1be20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
1be30 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41  ExprList *pFuncA
1be40 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74  rg;  /* Argument
1be50 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65  s to table-value
1be60 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  d-function */.  
1be70 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65    } u1;.    Inde
1be80 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a  x *pIBIndex;  /*
1be90 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
1bea0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1beb0 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20  o u1.zIndexedBy 
1bec0 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  */.  } a[1];    
1bed0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1bee0 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69  entry for each i
1bef0 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65  dentifier on the
1bf00 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
1bf10 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c  ** Permitted val
1bf20 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69  ues of the SrcLi
1bf30 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69  st.a.jointype fi
1bf40 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  eld.*/.#define J
1bf50 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30  T_INNER     0x00
1bf60 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e  01    /* Any kin
1bf70 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72  d of inner or cr
1bf80 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  oss join */.#def
1bf90 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20  ine JT_CROSS    
1bfa0 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78   0x0002    /* Ex
1bfb0 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68  plicit use of th
1bfc0 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20  e CROSS keyword 
1bfd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41  */.#define JT_NA
1bfe0 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20  TURAL   0x0004  
1bff0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20    /* True for a 
1c000 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a  "natural" join *
1c010 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46  /.#define JT_LEF
1c020 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20  T      0x0008   
1c030 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a   /* Left outer j
1c040 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1c050 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30  T_RIGHT     0x00
1c060 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  10    /* Right o
1c070 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
1c080 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20  fine JT_OUTER   
1c090 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54    0x0020    /* T
1c0a0 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f  he "OUTER" keywo
1c0b0 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  rd is present */
1c0c0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f  .#define JT_ERRO
1c0d0 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20  R     0x0040    
1c0e0 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e  /* unknown or un
1c0f0 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74  supported join t
1c100 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46  ype */.../*.** F
1c110 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65  lags appropriate
1c120 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c   for the wctrlFl
1c130 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66  ags parameter of
1c140 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67   sqlite3WhereBeg
1c150 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20  in().** and the 
1c160 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46  WhereInfo.wctrlF
1c170 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a  lags member..**.
1c180 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1c190 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
1c1a0 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
1c1b0 20 20 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c       WHERE_USE_L
1c1c0 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65  IMIT  == SF_Fixe
1c1d0 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e  dLimit.*/.#defin
1c1e0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1c1f0 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
1c200 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
1c210 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1c220 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
1c230 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
1c240 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
1c250 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
1c260 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1c270 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
1c280 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
1c290 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
1c2a0 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
1c2b0 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
1c2c0 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
1c2d0 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
1c2e0 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
1c2f0 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
1c300 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55  WHERE_ONEPASS_MU
1c310 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a  LTIROW 0x0008 /*
1c320 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77   ONEPASS is ok w
1c330 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
1c340 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
1c350 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b  RE_DUPLICATES_OK
1c360 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b      0x0010 /* Ok
1c370 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77   to return a row
1c380 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20   more than once 
1c390 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c3a0 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20  _OR_SUBCLAUSE   
1c3b0 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63    0x0020 /* Proc
1c3c0 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45  essing a sub-WHE
1c3d0 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20  RE as part of.  
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 20 20 20 20 20 20 20 20 20                  
1c400 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70      ** the OR op
1c410 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23  timization  */.#
1c420 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f  define WHERE_GRO
1c430 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78  UPBY          0x
1c440 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79  0040 /* pOrderBy
1c450 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f   is really a GRO
1c460 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
1c470 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42   WHERE_DISTINCTB
1c480 59 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f  Y       0x0080 /
1c490 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65  * pOrderby is re
1c4a0 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20  ally a DISTINCT 
1c4b0 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1c4c0 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53  e WHERE_WANT_DIS
1c4d0 54 49 4e 43 54 20 20 20 20 30 78 30 31 30 30 20  TINCT    0x0100 
1c4e0 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65  /* All output ne
1c4f0 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e  eds to be distin
1c500 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ct */.#define WH
1c510 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20  ERE_SORTBYGROUP 
1c520 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53       0x0200 /* S
1c530 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68  upport sqlite3Wh
1c540 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f  ereIsSorted() */
1c550 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1c560 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20  EEK_TABLE       
1c570 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0400 /* Do not
1c580 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20   defer seeks on 
1c590 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64  main table */.#d
1c5a0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1c5b0 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30  RBY_LIMIT    0x0
1c5c0 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c  800 /* ORDERBY+L
1c5d0 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65  IMIT on the inne
1c5e0 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e  r loop */.#defin
1c5f0 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49  e WHERE_SEEK_UNI
1c600 51 5f 54 41 42 4c 45 20 20 30 78 31 30 30 30 20  Q_TABLE  0x1000 
1c610 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20  /* Do not defer 
1c620 73 65 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20  seeks if unique 
1c630 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
1c640 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
1c650 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20    0x2000    not 
1c660 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a  currently used *
1c670 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c680 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20  USE_LIMIT       
1c690 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74   0x4000 /* Use t
1c6a0 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74  he LIMIT in cost
1c6b0 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20   estimates */.  
1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6d0 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38        /*     0x8
1c6e0 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65  000    not curre
1c6f0 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a  ntly used */../*
1c700 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
1c710 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
1c720 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e  te3WhereIsDistin
1c730 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ct().*/.#define 
1c740 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e  WHERE_DISTINCT_N
1c750 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44  OOP      0  /* D
1c760 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
1c770 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  not used */.#def
1c780 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1c790 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20  CT_UNIQUE    1  
1c7a0 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73  /* No duplicates
1c7b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c7c0 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52  E_DISTINCT_ORDER
1c7d0 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64  ED   2  /* All d
1c7e0 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64  uplicates are ad
1c7f0 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  jacent */.#defin
1c800 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1c810 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a  _UNORDERED 3  /*
1c820 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   Duplicates are 
1c830 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a  scattered */../*
1c840 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78  .** A NameContex
1c850 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74  t defines a cont
1c860 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20  ext in which to 
1c870 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e  resolve table an
1c880 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65  d column.** name
1c890 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20  s.  The context 
1c8a0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69  consists of a li
1c8b0 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68  st of tables (th
1c8c0 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c  e pSrcList) fiel
1c8d0 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20  d and.** a list 
1c8e0 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
1c8f0 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54  ion (pEList).  T
1c900 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  he named express
1c910 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20  ion list may.** 
1c920 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53  be NULL.  The pS
1c930 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  rc corresponds t
1c940 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  o the FROM claus
1c950 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72  e of a SELECT or
1c960 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65  .** to the table
1c970 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
1c980 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50  on by INSERT, UP
1c990 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e  DATE, or DELETE.
1c9a0 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20    The.** pEList 
1c9b0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
1c9c0 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66  he result set of
1c9d0 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73   a SELECT and is
1c9e0 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68   NULL for.** oth
1c9f0 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  er statements..*
1ca00 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  *.** NameContext
1ca10 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e  s can be nested.
1ca20 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67    When resolving
1ca30 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65   names, the inne
1ca40 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78  r-most.** contex
1ca50 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69  t is searched fi
1ca60 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63  rst.  If no matc
1ca70 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
1ca80 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f  next outer.** co
1ca90 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64  ntext is checked
1caa0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73  .  If there is s
1cab0 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74  till no match, t
1cac0 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a  he next context.
1cad0 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  ** is checked.  
1cae0 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e  This process con
1caf0 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74  tinues until eit
1cb00 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66  her a match is f
1cb10 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63  ound.** or all c
1cb20 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63  ontexts are chec
1cb30 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68  k.  When a match
1cb40 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
1cb50 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a  Ref member of.**
1cb60 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   the context con
1cb70 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63  taining the matc
1cb80 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  h is incremented
1cb90 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62  ..**.** Each sub
1cba0 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77  query gets a new
1cbb0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54   NameContext.  T
1cbc0 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70  he pNext field p
1cbd0 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
1cbe0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74  NameContext in t
1cbf0 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e  he parent query.
1cc00 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65    Thus the proce
1cc10 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74  ss of scanning t
1cc20 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
1cc30 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  t list correspon
1cc40 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20  ds to searching 
1cc50 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69  through successi
1cc60 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75  vely outer.** su
1cc70 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67  bqueries looking
1cc80 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f   for a match..*/
1cc90 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74  .struct NameCont
1cca0 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  ext {.  Parse *p
1ccb0 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20  Parse;       /* 
1ccc0 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  The parser */.  
1ccd0 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
1cce0 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  t;   /* One or m
1ccf0 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20  ore tables used 
1cd00 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73  to resolve names
1cd10 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
1cd20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
1cd30 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e  st;    /* Option
1cd40 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c  al list of resul
1cd50 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t-set columns */
1cd60 0a 20 20 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  .    AggInfo *pA
1cd70 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66  ggInfo;   /* Inf
1cd80 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
1cd90 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69  ggregates at thi
1cda0 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 55  s level */.    U
1cdb0 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b 20  psert *pUpsert; 
1cdc0 20 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c 49      /* ON CONFLI
1cdd0 43 54 20 63 6c 61 75 73 65 20 69 6e 66 6f 72 6d  CT clause inform
1cde0 61 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75 70  ation from an up
1cdf0 73 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43 3b  sert */.  } uNC;
1ce00 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a  .  NameContext *
1ce10 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
1ce20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65  outer name conte
1ce30 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75  xt.  NULL for ou
1ce40 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74  termost */.  int
1ce50 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
1ce60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
1ce70 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79  ames resolved by
1ce80 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f   this context */
1ce90 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1cea0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ceb0 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f  r of errors enco
1cec0 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65  untered while re
1ced0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f  solving names */
1cee0 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20  .  u16 ncFlags; 
1cef0 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20          /* Zero 
1cf00 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61  or more NC_* fla
1cf10 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  gs defined below
1cf20 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 57   */.  Select *pW
1cf30 69 6e 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53 45  inSelect;  /* SE
1cf40 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 66  LECT statement f
1cf50 6f 72 20 61 6e 79 20 77 69 6e 64 6f 77 20 66 75  or any window fu
1cf60 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  nctions */.};../
1cf70 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
1cf80 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65  ues for the Name
1cf90 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73  Context, ncFlags
1cfa0 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61   field..**.** Va
1cfb0 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1cfc0 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61  (all checked via
1cfd0 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
1cfe0 20 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d    NC_HasAgg    =
1cff0 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20  = SF_HasAgg.**  
1d000 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d    NC_MinMaxAgg =
1d010 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d  = SF_MinMaxAgg =
1d020 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  = SQLITE_FUNC_MI
1d030 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69  NMAX.**.*/.#defi
1d040 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20  ne NC_AllowAgg  
1d050 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65  0x0001  /* Aggre
1d060 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
1d070 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
1d080 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61  */.#define NC_Pa
1d090 72 74 49 64 78 20 20 20 30 78 30 30 30 32 20 20  rtIdx   0x0002  
1d0a0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1d0b0 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69  ving a partial i
1d0c0 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64  ndex WHERE */.#d
1d0d0 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b  efine NC_IsCheck
1d0e0 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72     0x0004  /* Tr
1d0f0 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1d100 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b  names in a CHECK
1d110 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
1d120 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46  define NC_InAggF
1d130 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54  unc 0x0008  /* T
1d140 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67  rue if analyzing
1d150 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e   arguments to an
1d160 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65   agg func */.#de
1d170 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20  fine NC_HasAgg  
1d180 20 20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65    0x0010  /* One
1d190 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
1d1a0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65  te functions see
1d1b0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1d1c0 49 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30  IdxExpr   0x0020
1d1d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
1d1e0 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f  olving columns o
1d1f0 66 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  f CREATE INDEX *
1d200 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72  /.#define NC_Var
1d210 53 65 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f  Select 0x0040  /
1d220 2a 20 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73  * A correlated s
1d230 75 62 71 75 65 72 79 20 68 61 73 20 62 65 65 6e  ubquery has been
1d240 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1d250 20 4e 43 5f 55 45 4c 69 73 74 20 20 20 20 30 78   NC_UEList    0x
1d260 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0080  /* True if
1d270 20 75 4e 43 2e 70 45 4c 69 73 74 20 69 73 20 75   uNC.pEList is u
1d280 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  sed */.#define N
1d290 43 5f 55 41 67 67 49 6e 66 6f 20 20 30 78 30 31  C_UAggInfo  0x01
1d2a0 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75  00  /* True if u
1d2b0 4e 43 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 75  NC.pAggInfo is u
1d2c0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  sed */.#define N
1d2d0 43 5f 55 55 70 73 65 72 74 20 20 20 30 78 30 32  C_UUpsert   0x02
1d2e0 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75  00  /* True if u
1d2f0 4e 43 2e 70 55 70 73 65 72 74 20 69 73 20 75 73  NC.pUpsert is us
1d300 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ed */.#define NC
1d310 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30  _MinMaxAgg 0x100
1d320 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67  0  /* min/max ag
1d330 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20  gregates seen.  
1d340 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a  See note above *
1d350 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d  /.#define NC_Com
1d360 70 6c 65 78 20 20 20 30 78 32 30 30 30 20 20 2f  plex   0x2000  /
1d370 2a 20 54 72 75 65 20 69 66 20 61 20 66 75 6e 63  * True if a func
1d380 74 69 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79  tion or subquery
1d390 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1d3a0 20 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30 78   NC_AllowWin  0x
1d3b0 34 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77 20  4000  /* Window 
1d3c0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
1d3d0 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 0a 2f  lowed here */../
1d3e0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1d3f0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1d400 67 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  g object describ
1d410 65 73 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43  es a single ON C
1d420 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73  ONFLICT.** claus
1d430 65 20 69 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a  e in an upsert..
1d440 2a 2a 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72  **.** The pUpser
1d450 74 54 61 72 67 65 74 20 66 69 65 6c 64 20 69 73  tTarget field is
1d460 20 6f 6e 6c 79 20 73 65 74 20 69 66 20 74 68 65   only set if the
1d470 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1d480 75 73 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20  use includes.** 
1d490 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20  conflict-target 
1d4a0 63 6c 61 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e  clause.  (In "ON
1d4b0 20 43 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22 20   CONFLICT(a,b)" 
1d4c0 74 68 65 20 22 28 61 2c 62 29 22 20 69 73 20 74  the "(a,b)" is t
1d4d0 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74  he.** conflict-t
1d4e0 61 72 67 65 74 20 63 6c 61 75 73 65 2e 29 20 20  arget clause.)  
1d4f0 54 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65  The pUpsertTarge
1d500 74 57 68 65 72 65 20 69 73 20 74 68 65 20 6f 70  tWhere is the op
1d510 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20  tional.** WHERE 
1d520 63 6c 61 75 73 65 20 75 73 65 64 20 74 6f 20 69  clause used to i
1d530 64 65 6e 74 69 66 79 20 70 61 72 74 69 61 6c 20  dentify partial 
1d540 75 6e 69 71 75 65 20 69 6e 64 65 78 65 73 2e 0a  unique indexes..
1d550 2a 2a 0a 2a 2a 20 70 55 70 73 65 72 74 53 65 74  **.** pUpsertSet
1d560 20 69 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   is the list of 
1d570 63 6f 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d  column=expr term
1d580 73 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  s of the UPDATE 
1d590 73 74 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54  statement. .** T
1d5a0 68 65 20 70 55 70 73 65 72 74 53 65 74 20 66 69  he pUpsertSet fi
1d5b0 65 6c 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20  eld is NULL for 
1d5c0 61 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f  a ON CONFLICT DO
1d5d0 20 4e 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a   NOTHING.  The.*
1d5e0 2a 20 70 55 70 73 65 72 74 57 68 65 72 65 20 69  * pUpsertWhere i
1d5f0 73 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  s the WHERE clau
1d600 73 65 20 66 6f 72 20 74 68 65 20 55 50 44 41 54  se for the UPDAT
1d610 45 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66  E and is NULL if
1d620 20 74 68 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c   the.** WHERE cl
1d630 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2e  ause is omitted.
1d640 0a 2a 2f 0a 73 74 72 75 63 74 20 55 70 73 65 72  .*/.struct Upser
1d650 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
1d660 70 55 70 73 65 72 74 54 61 72 67 65 74 3b 20 20  pUpsertTarget;  
1d670 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63  /* Optional desc
1d680 72 69 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c  ription of confl
1d690 69 63 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  icting index */.
1d6a0 20 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 54    Expr *pUpsertT
1d6b0 61 72 67 65 74 57 68 65 72 65 3b 20 2f 2a 20 57  argetWhere; /* W
1d6c0 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1d6d0 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 74 61  partial index ta
1d6e0 72 67 65 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c  rgets */.  ExprL
1d6f0 69 73 74 20 2a 70 55 70 73 65 72 74 53 65 74 3b  ist *pUpsertSet;
1d700 20 20 20 20 20 2f 2a 20 54 68 65 20 53 45 54 20       /* The SET 
1d710 63 6c 61 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f  clause from an O
1d720 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54  N CONFLICT UPDAT
1d730 45 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70  E */.  Expr *pUp
1d740 73 65 72 74 57 68 65 72 65 3b 20 20 20 20 20 20  sertWhere;      
1d750 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
1d760 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46   for the ON CONF
1d770 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20  LICT UPDATE */. 
1d780 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 61   /* The fields a
1d790 62 6f 76 65 20 63 6f 6d 70 72 69 73 65 20 74 68  bove comprise th
1d7a0 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
1d7b0 20 74 68 65 20 75 70 73 65 72 74 20 63 6c 61 75   the upsert clau
1d7c0 73 65 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 65  se..  ** The fie
1d7d0 6c 64 73 20 62 65 6c 6f 77 20 61 72 65 20 75 73  lds below are us
1d7e0 65 64 20 74 6f 20 74 72 61 6e 73 66 65 72 20 69  ed to transfer i
1d7f0 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
1d800 74 68 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20  the INSERT.  ** 
1d810 70 72 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e 20  processing down 
1d820 69 6e 74 6f 20 74 68 65 20 55 50 44 41 54 45 20  into the UPDATE 
1d830 70 72 6f 63 65 73 73 69 6e 67 20 77 68 69 6c 65  processing while
1d840 20 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 64 65   generating code
1d850 2e 0a 20 20 2a 2a 20 55 70 73 65 72 74 20 6f 77  ..  ** Upsert ow
1d860 6e 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ns the memory al
1d870 6c 6f 63 61 74 65 64 20 61 62 6f 76 65 2c 20 62  located above, b
1d880 75 74 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72  ut not the memor
1d890 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e  y below. */.  In
1d8a0 64 65 78 20 2a 70 55 70 73 65 72 74 49 64 78 3b  dex *pUpsertIdx;
1d8b0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74          /* Const
1d8c0 72 61 69 6e 74 20 74 68 61 74 20 70 55 70 73 65  raint that pUpse
1d8d0 72 74 54 61 72 67 65 74 20 69 64 65 6e 74 69 66  rtTarget identif
1d8e0 69 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ies */.  SrcList
1d8f0 20 2a 70 55 70 73 65 72 74 53 72 63 3b 20 20 20   *pUpsertSrc;   
1d900 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62     /* Table to b
1d910 65 20 75 70 64 61 74 65 64 20 2a 2f 0a 20 20 69  e updated */.  i
1d920 6e 74 20 72 65 67 44 61 74 61 3b 20 20 20 20 20  nt regData;     
1d930 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
1d940 74 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  t register holdi
1d950 6e 67 20 61 72 72 61 79 20 6f 66 20 56 41 4c 55  ng array of VALU
1d960 45 53 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74  ES */.  int iDat
1d970 61 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  aCur;           
1d980 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68    /* Index of th
1d990 65 20 64 61 74 61 20 63 75 72 73 6f 72 20 2a 2f  e data cursor */
1d9a0 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20  .  int iIdxCur; 
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d9c0 49 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72  Index of the fir
1d9d0 73 74 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  st index cursor 
1d9e0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1d9f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1da00 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1da10 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c  ure contains all
1da20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
1da30 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
1da40 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69  te code for a si
1da50 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  ngle SELECT stat
1da60 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ement..**.** See
1da70 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
1da80 65 6e 74 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75  ent on the compu
1da90 74 65 4c 69 6d 69 74 52 65 67 69 73 74 65 72 73  teLimitRegisters
1daa0 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 61  () routine for a
1dab0 0a 2a 2a 20 64 65 74 61 69 6c 65 64 20 64 65 73  .** detailed des
1dac0 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20  cription of the 
1dad0 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 69  meaning of the i
1dae0 4c 69 6d 69 74 20 61 6e 64 20 69 4f 66 66 73 65  Limit and iOffse
1daf0 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20  t fields..**.** 
1db00 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65  addrOpenEphm[] e
1db10 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74  ntries contain t
1db20 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50  he address of OP
1db30 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
1db40 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65  pcodes..** These
1db50 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20   addresses must 
1db60 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61  be stored so tha
1db70 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b  t we can go back
1db80 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20   and fill in.** 
1db90 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61  the P4_KEYINFO a
1dba0 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73  nd P2 parameters
1dbb0 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72   later.  Neither
1dbc0 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72   the KeyInfo nor
1dbd0 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
1dbe0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20  f columns in P2 
1dbf0 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20  can be computed 
1dc00 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
1dc10 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70  .** as the OP_Op
1dc20 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69  enEphm instructi
1dc30 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61  on is coded beca
1dc40 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67  use not.** enoug
1dc50 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
1dc60 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64  out the compound
1dc70 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20   query is known 
1dc80 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a  at that point..*
1dc90 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f  * The KeyInfo fo
1dca0 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30  r addrOpenTran[0
1dcb0 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69  ] and [1] contai
1dcc0 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ns collating seq
1dcd0 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68  uences.** for th
1dce0 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54  e result set.  T
1dcf0 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1dd00 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63  ddrOpenEphm[2] c
1dd10 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1dd20 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66  g.** sequences f
1dd30 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1dd40 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
1dd50 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70  t Select {.  Exp
1dd60 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1dd70 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64      /* The field
1dd80 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  s of the result 
1dd90 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1ddb0 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20  ne of: TK_UNION 
1ddc0 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53  TK_ALL TK_INTERS
1ddd0 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f  ECT TK_EXCEPT */
1dde0 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63  .  LogEst nSelec
1ddf0 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  tRow;     /* Est
1de00 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
1de10 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
1de20 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20    u32 selFlags; 
1de30 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
1de40 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
1de50 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
1de60 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
1de70 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
1de80 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
1de90 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
1dea0 2a 2f 0a 20 20 75 33 32 20 73 65 6c 49 64 3b 20  */.  u32 selId; 
1deb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
1dec0 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72  nique identifier
1ded0 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73   number for this
1dee0 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74   SELECT */.  int
1def0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
1df00 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
1df10 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
1df20 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
1df30 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ct */.  SrcList 
1df40 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
1df50 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
1df60 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
1df70 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
1df80 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1df90 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1dfa0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
1dfb0 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
1dfc0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
1dfd0 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
1dfe0 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
1dff0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1e000 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1e010 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
1e020 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
1e030 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
1e040 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
1e050 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
1e060 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
1e070 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
1e080 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1e090 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
1e0a0 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
1e0b0 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
1e0c0 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
1e0d0 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
1e0e0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
1e0f0 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
1e100 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
1e110 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49             /* WI
1e120 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68  TH clause attach
1e130 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1e140 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23  t. Or NULL. */.#
1e150 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1e160 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20  IT_WINDOWFUNC.  
1e170 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20  Window *pWin;   
1e180 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
1e190 66 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  f window functio
1e1a0 6e 73 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a  ns */.  Window *
1e1b0 70 57 69 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f  pWinDefn;      /
1e1c0 2a 20 4c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  * List of named 
1e1d0 77 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f  window definitio
1e1e0 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ns */.#endif.};.
1e1f0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
1e200 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74  alues for Select
1e210 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20  .selFlags.  The 
1e220 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e  "SF" prefix stan
1e230 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63  ds for.** "Selec
1e240 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56  t Flag"..**.** V
1e250 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1e260 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69   (all checked vi
1e270 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20  a assert()).**  
1e280 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20     SF_HasAgg    
1e290 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a   == NC_HasAgg.**
1e2a0 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67       SF_MinMaxAg
1e2b0 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41  g  == NC_MinMaxA
1e2c0 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  gg     == SQLITE
1e2d0 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20  _FUNC_MINMAX.** 
1e2e0 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69      SF_FixedLimi
1e2f0 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c  t == WHERE_USE_L
1e300 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT.*/.#define 
1e310 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20  SF_Distinct     
1e320 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75    0x00001  /* Ou
1e330 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44  tput should be D
1e340 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69  ISTINCT */.#defi
1e350 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20  ne SF_All       
1e360 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a       0x00002  /*
1e370 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c   Includes the AL
1e380 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  L keyword */.#de
1e390 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64  fine SF_Resolved
1e3a0 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20         0x00004  
1e3b0 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68  /* Identifiers h
1e3c0 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
1e3d0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1e3e0 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30  Aggregate      0
1e3f0 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61  x00008  /* Conta
1e400 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e  ins agg function
1e410 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20  s or a GROUP BY 
1e420 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
1e430 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30  sAgg         0x0
1e440 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0010  /* Contain
1e450 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
1e460 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
1e470 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61   SF_UsesEphemera
1e480 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55  l  0x00020  /* U
1e490 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65  ses the OpenEphe
1e4a0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a  meral opcode */.
1e4b0 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e  #define SF_Expan
1e4c0 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34  ded       0x0004
1e4d0 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c  0  /* sqlite3Sel
1e4e0 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c  ectExpand() call
1e4f0 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64  ed on this */.#d
1e500 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65  efine SF_HasType
1e510 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20  Info    0x00080 
1e520 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72   /* FROM subquer
1e530 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d  ies have Table m
1e540 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  etadata */.#defi
1e550 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20  ne SF_Compound  
1e560 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a       0x00100  /*
1e570 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f   Part of a compo
1e580 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65  und query */.#de
1e590 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20  fine SF_Values  
1e5a0 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20         0x00200  
1e5b0 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66  /* Synthesized f
1e5c0 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73  rom VALUES claus
1e5d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1e5e0 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30  MultiValue     0
1e5f0 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c  x00400  /* Singl
1e600 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69  e VALUES term wi
1e610 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
1e620 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
1e630 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78  estedFrom     0x
1e640 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00800  /* Part o
1e650 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
1e660 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
1e670 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d  .#define SF_MinM
1e680 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30  axAgg      0x010
1e690 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  00  /* Aggregate
1e6a0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28   containing min(
1e6b0 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64  ) or max() */.#d
1e6c0 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69  efine SF_Recursi
1e6d0 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20  ve      0x02000 
1e6e0 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76   /* The recursiv
1e6f0 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75  e part of a recu
1e700 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65  rsive CTE */.#de
1e710 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d  fine SF_FixedLim
1e720 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20  it     0x04000  
1e730 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65  /* nSelectRow se
1e740 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20  t by a constant 
1e750 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT */.#define
1e760 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
1e770 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e     0x08000  /* N
1e780 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
1e790 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1e7a0 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
1e7b0 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20   SF_Converted   
1e7c0 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42     0x10000  /* B
1e7d0 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  y convertCompoun
1e7e0 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1e7f0 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1e800 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20  F_IncludeHidden 
1e810 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63   0x20000  /* Inc
1e820 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  lude hidden colu
1e830 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f  mns in output */
1e840 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70  .#define SF_Comp
1e850 6c 65 78 52 65 73 75 6c 74 20 20 30 78 34 30 30  lexResult  0x400
1e860 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f  00  /* Result co
1e870 6e 74 61 69 6e 73 20 73 75 62 71 75 65 72 79 20  ntains subquery 
1e880 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a  or function */..
1e890 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
1e8a0 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61  s of a SELECT ca
1e8b0 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
1e8c0 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1e8d0 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  , as defined.** 
1e8e0 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  by one of the fo
1e8f0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20  llowing macros. 
1e900 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69   The "SRT" prefi
1e910 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
1e920 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e  Result.** Type".
1e930 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55  .**.**     SRT_U
1e940 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65  nion       Store
1e950 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65   results as a ke
1e960 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  y in a temporary
1e970 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20   index.**       
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64                id
1e990 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73  entified by pDes
1e9a0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1e9b0 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74  *     SRT_Except
1e9c0 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73        Remove res
1e9d0 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65  ults from the te
1e9e0 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44  mporary index pD
1e9f0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1ea00 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73  .**     SRT_Exis
1ea10 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20  ts      Store a 
1ea20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 in memory cell
1ea30 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1ea40 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  if the result.**
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea60 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20       set is not 
1ea70 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  empty..**.**    
1ea80 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
1ea90 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c   Throw the resul
1eaa0 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69  ts away.  This i
1eab0 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54  s used by SELECT
1eac0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ead0 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
1eae0 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
1eaf0 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75  rs whose only pu
1eb00 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20  rpose is.**     
1eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73  the side-effects
1eb30 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a   of functions..*
1eb40 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20  *.** All of the 
1eb50 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74  above are free t
1eb60 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f  o ignore their O
1eb70 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20  RDER BY clause. 
1eb80 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f  Those that.** fo
1eb90 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20  llow must honor 
1eba0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1ebb0 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1ebc0 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47  RT_Output      G
1ebd0 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66  enerate a row of
1ebe0 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74   output (using t
1ebf0 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a  he OP_ResultRow.
1ec00 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ec10 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66         opcode) f
1ec20 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
1ec30 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a  he result set..*
1ec40 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d  *.**     SRT_Mem
1ec50 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61           Only va
1ec60 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  lid if the resul
1ec70 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  t is a single co
1ec80 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20  lumn..**        
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f               Sto
1eca0 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c  re the first col
1ecb0 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74  umn of the first
1ecc0 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20   result row.**  
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ece0 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70     in register p
1ecf0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68  Dest->iSDParm th
1ed00 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72  en abandon the r
1ed10 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  est.**          
1ed20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
1ed30 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64  e query.  This d
1ed40 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69  estination impli
1ed50 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a  es "LIMIT 1"..**
1ed60 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20  .**     SRT_Set 
1ed70 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75          The resu
1ed80 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e  lt must be a sin
1ed90 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f  gle column.  Sto
1eda0 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20  re each.**      
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1edc0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20  ow of result as 
1edd0 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65  the key in table
1ede0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1edf0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ee00 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68          Apply th
1ee10 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74  e affinity pDest
1ee20 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65  ->affSdst before
1ee30 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20   storing.**     
1ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee50 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74  results.  Used t
1ee60 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20  o implement "IN 
1ee70 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a  (SELECT ...)"..*
1ee80 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68  *.**     SRT_Eph
1ee90 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20  emTab    Create 
1eea0 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  an temporary tab
1eeb0 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1eec0 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20  m and store.**  
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eee0 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68     the result th
1eef0 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20  ere. The cursor 
1ef00 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74  is left open aft
1ef10 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  er.**           
1ef20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1ef30 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69  ing.  This is li
1ef40 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63  ke SRT_Table exc
1ef50 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20  ept that.**     
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef70 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  this destination
1ef80 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68   uses OP_OpenEph
1ef90 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65  emeral to create
1efa0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1efb0 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c          the tabl
1efc0 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  e first..**.**  
1efd0 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65     SRT_Coroutine
1efe0 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f     Generate a co
1eff0 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65  -routine that re
1f000 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20  turns a new row 
1f010 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  of.**           
1f020 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1f030 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69  s each time it i
1f040 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20  s invoked.  The 
1f050 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20  entry point.**  
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f070 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75     of the co-rou
1f080 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69  tine is stored i
1f090 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1f0a0 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20  ->iSDParm.**    
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0c0 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
1f0d0 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e  row is stored in
1f0e0 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65   pDest->nDest re
1f0f0 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20  gisters.**      
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1f110 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65  tarting with pDe
1f120 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a  st->iSdst..**.**
1f130 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20       SRT_Table  
1f140 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1f150 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ts in temporary 
1f160 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1f170 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54  Parm..**     SRT
1f180 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69  _Fifo        Thi
1f190 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70  s is like SRT_Ep
1f1a0 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68  hemTab except th
1f1b0 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  at the table.** 
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1d0 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74      is assumed t
1f1e0 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65  o already be ope
1f1f0 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73  n.  SRT_Fifo has
1f200 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f210 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69          the addi
1f220 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20  tional property 
1f230 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  of being able to
1f240 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20   ignore.**      
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f260 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1f270 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1f280 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74  T_DistFifo    St
1f290 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ore results in a
1f2a0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1f2b0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1f2c0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f2d0 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f          But also
1f2e0 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74   use temporary t
1f2f0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1f300 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20  arm+1 as.**     
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f320 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20  a record of all 
1f330 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e  prior results an
1f340 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70  d ignore any dup
1f350 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  licate.**       
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1f370 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a  ws.  Name means:
1f380 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f    "Distinct Fifo
1f390 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1f3a0 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f  _Queue       Sto
1f3b0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1f3c0 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1f3d0 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61  st->iSDParm (rea
1f3e0 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  lly.**          
1f3f0 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e             an in
1f400 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20  dex).  Append a 
1f410 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1f420 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72  so that all entr
1f430 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ies.**          
1f440 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64             are d
1f450 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20  istinct..**.**  
1f460 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65     SRT_DistQueue
1f470 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1f480 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1f490 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1f4a0 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20  m only if.**    
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4c0 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64   the same record
1f4d0 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20   has never been 
1f4e0 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20  stored before.  
1f4f0 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  The.**          
1f500 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
1f510 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61   at pDest->iSDPa
1f520 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72  rm+1 hold all pr
1f530 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23  ior stores..*/.#
1f540 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
1f550 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
1f560 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
1f570 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1f580 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
1f590 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
1f5a0 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
1f5b0 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
1f5c0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1f5d0 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
1f5e0 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
1f5f0 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
1f600 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
1f610 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
1f620 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
1f630 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
1f640 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65   anywhere */.#de
1f650 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20  fine SRT_Fifo   
1f660 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72        5  /* Stor
1f670 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
1f680 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
1f690 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
1f6a0 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f  ine SRT_DistFifo
1f6b0 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20       6  /* Like 
1f6c0 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e  SRT_Fifo, but un
1f6d0 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1f6e0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1f6f0 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20  _Queue        7 
1f700 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1f710 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a   in an queue */.
1f720 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1f730 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c  Queue    8  /* L
1f740 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62  ike SRT_Queue, b
1f750 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1f760 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68  s only */../* Th
1f770 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1f780 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
1f790 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
1f7a0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
1f7b0 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
1f7c0 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
1f7d0 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64  T_DistQueue)..#d
1f7e0 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74  efine SRT_Output
1f7f0 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74         9  /* Out
1f800 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  put each row of 
1f810 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1f820 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20  e SRT_Mem       
1f830 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72    10  /* Store r
1f840 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72  esult in a memor
1f850 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e  y cell */.#defin
1f860 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20  e SRT_Set       
1f870 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72    11  /* Store r
1f880 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69  esults as keys i
1f890 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1f8a0 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
1f8b0 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65  ab    12  /* Cre
1f8c0 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
1f8d0 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
1f8e0 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
1f8f0 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
1f900 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e  ine   13  /* Gen
1f910 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
1f920 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1f930 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c  #define SRT_Tabl
1f940 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53  e       14  /* S
1f950 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
1f960 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
1f970 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a  matic rowid */..
1f980 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1f990 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
1f9a0 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65   describes where
1f9b0 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72   to put of the r
1f9c0 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53  esults of.** a S
1f9d0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1f9e0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1f9f0 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65  tDest {.  u8 eDe
1fa00 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
1fa10 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
1fa20 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
1fa30 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
1fa40 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ove. */.  int iS
1fa50 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f  DParm;         /
1fa60 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73  * A parameter us
1fa70 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20  ed by the eDest 
1fa80 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20  disposal method 
1fa90 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20  */.  int iSdst; 
1faa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
1fab0 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
1fac0 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
1fad0 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
1fae0 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1faf0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
1fb00 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
1fb10 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53  */.  char *zAffS
1fb20 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  dst;      /* Aff
1fb30 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
1fb40 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
1fb50 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
1fb60 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20  rderBy;  /* Key 
1fb70 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f  columns for SRT_
1fb80 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69  Queue and SRT_Di
1fb90 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f  stQueue */.};../
1fba0 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
1fbb0 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
1fbc0 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
1fbd0 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
1fbe0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20  UTOINCREMENT.** 
1fbf0 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
1fc00 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
1fc10 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
1fc20 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
1fc30 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
1fc40 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
1fc50 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
1fc60 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
1fc70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
1fc80 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
1fc90 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
1fca0 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
1fcb0 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
1fcc0 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
1fcd0 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
1fce0 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65  inserts are done
1fcf0 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1fd00 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
1fd10 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
1fd20 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
1fd30 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
1fd40 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
1fd50 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
1fd60 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
1fd70 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
1fd80 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
1fd90 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
1fda0 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
1fdb0 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
1fdc0 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
1fdd0 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
1fde0 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
1fdf0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1fe00 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
1fe10 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
1fe20 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
1fe30 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1fe40 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
1fe50 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
1fe60 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1fe70 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
1fe80 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
1fe90 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1fea0 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
1feb0 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
1fec0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65  .};../*.** At le
1fed0 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65  ast one instance
1fee0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1fef0 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63  g structure is c
1ff00 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a  reated for each.
1ff10 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
1ff20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
1ff30 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
1ff40 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
1ff50 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
1ff60 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
1ff70 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
1ff80 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
1ff90 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
1ffa0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1ffb0 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
1ffc0 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
1ffd0 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
1ffe0 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
1fff0 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
20000 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
20010 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
20020 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
20030 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
20040 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
20050 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
20060 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
20070 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
20080 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
20090 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
200a0 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
200b0 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
200c0 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
200d0 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
200e0 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
200f0 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
20100 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
20110 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
20120 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
20130 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
20140 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
20150 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
20160 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
20170 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
20180 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
20190 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
201a0 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
201b0 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
201c0 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e  .** statements).
201d0 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20   Similarly, the 
201e0 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
201f0 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20  ask[1] variable 
20200 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d  is set to.** a m
20210 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
20220 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65  umns used by the
20230 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72   program..*/.str
20240 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b  uct TriggerPrg {
20250 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
20260 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72  gger;      /* Tr
20270 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72  igger this progr
20280 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f  am was coded fro
20290 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  m */.  TriggerPr
202a0 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  g *pNext;      /
202b0 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20  * Next entry in 
202c0 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
202d0 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50  g list */.  SubP
202e0 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
202f0 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69  ;   /* Program i
20300 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69  mplementing pTri
20310 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20  gger/orconf */. 
20320 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20   int orconf;    
20330 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
20340 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
20350 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20  policy */.  u32 
20360 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20  aColmask[2];    
20370 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20      /* Masks of 
20380 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c  old.*, new.* col
20390 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f  umns accessed */
203a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79  .};../*.** The y
203b0 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20  DbMask datatype 
203c0 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20  for the bitmask 
203d0 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
203e0 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69  databases..*/.#i
203f0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
20400 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64  ACHED>30.  typed
20410 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  ef unsigned char
20420 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45   yDbMask[(SQLITE
20430 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29  _MAX_ATTACHED+9)
20440 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  /8];.# define Db
20450 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
20460 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31   (((M)[(I)/8]&(1
20470 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a  <<((I)&7)))!=0).
20480 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
20490 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73  ero(M)      mems
204a0 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28  et((M),0,sizeof(
204b0 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  M)).# define DbM
204c0 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
204d0 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c  (M)[(I)/8]|=(1<<
204e0 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e  ((I)&7)).# defin
204f0 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
20500 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  M)   sqlite3DbMa
20510 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64  skAllZero(M).# d
20520 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
20530 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65  ero(M)   (sqlite
20540 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
20550 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79  )==0).#else.  ty
20560 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69  pedef unsigned i
20570 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65  nt yDbMask;.# de
20580 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
20590 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28  M,I)    (((M)&((
205a0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
205b0 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
205c0 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
205d0 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e     (M)=0.# defin
205e0 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
205f0 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62       (M)|=(((yDb
20600 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20  Mask)1)<<(I)).# 
20610 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
20620 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30  Zero(M)   (M)==0
20630 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20640 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  NonZero(M)   (M)
20650 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  !=0.#endif../*.*
20660 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20  * An SQL parser 
20670 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79  context.  A copy
20680 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
20690 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72  re is passed thr
206a0 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  ough.** the pars
206b0 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f  er and down into
206c0 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20   all the parser 
206d0 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69  action routine i
206e0 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61  n order to.** ca
206f0 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72  rry around infor
20700 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67  mation that is g
20710 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74  lobal to the ent
20720 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a  ire parse..**.**
20730 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69   The structure i
20740 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74  s divided into t
20750 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20  wo parts.  When 
20760 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63  the parser and c
20770 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20  ode.** generate 
20780 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20  call themselves 
20790 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65  recursively, the
207a0 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74   first part of t
207b0 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  he structure.** 
207c0 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20  is constant but 
207d0 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20  the second part 
207e0 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20  is reset at the 
207f0 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e  beginning and en
20800 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63  d of.** each rec
20810 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ursion..**.** Th
20820 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64  e nTableLock and
20830 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69   aTableLock vari
20840 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75  ables are only u
20850 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65  sed if the share
20860 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75  d-cache.** featu
20870 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
20880 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
20890 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
208a0 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
208b0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
208c0 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
208d0 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
208e0 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
208f0 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
20900 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
20910 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
20920 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
20930 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
20940 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
20950 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
20960 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
20970 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
20980 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
20990 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   */.  char *zErr
209a0 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e  Msg;       /* An
209b0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
209c0 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  /.  Vdbe *pVdbe;
209d0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65           /* An e
209e0 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74  ngine for execut
209f0 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74  ing database byt
20a00 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72  ecode */.  int r
20a10 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
20a20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  /* Return code f
20a30 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  rom execution */
20a40 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
20a50 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
20a60 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
20a70 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
20a80 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
20a90 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61    u8 checkSchema
20aa0 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73  ;      /* Causes
20ab0 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
20ac0 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  heck after an er
20ad0 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74  ror */.  u8 nest
20ae0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
20af0 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
20b00 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70  d calls to the p
20b10 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72  arser/code gener
20b20 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65  ator */.  u8 nTe
20b30 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  mpReg;         /
20b40 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70  * Number of temp
20b50 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
20b60 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f  in aTempReg[] */
20b70 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
20b80 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
20b90 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
20ba0 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
20bb0 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
20bc0 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
20bd0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
20be0 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
20bf0 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
20c00 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
20c10 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
20c20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
20c30 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
20c40 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
20c50 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f  uery() */.  u8 o
20c60 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20  kConstFactor;   
20c70 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   /* OK to factor
20c80 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a   out constants *
20c90 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f  /.  u8 disableLo
20ca0 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62  okaside; /* Numb
20cb0 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b  er of times look
20cc0 61 73 69 64 65 20 68 61 73 20 62 65 65 6e 20 64  aside has been d
20cd0 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20  isabled */.  u8 
20ce0 64 69 73 61 62 6c 65 56 74 61 62 3b 20 20 20 20  disableVtab;    
20cf0 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 61 6c 6c    /* Disable all
20d00 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
20d10 66 6f 72 20 74 68 69 73 20 70 61 72 73 65 20 2a  for this parse *
20d20 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
20d30 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
20d40 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
20d50 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
20d60 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
20d70 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
20d80 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
20d90 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
20da0 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
20db0 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
20dc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20dd0 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
20de0 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
20df0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20e00 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
20e10 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
20e20 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
20e30 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
20e40 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
20e50 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
20e60 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 73 7a   far */.  int sz
20e70 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f  OpAlloc;       /
20e80 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72  * Bytes of memor
20e90 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  y space allocate
20ea0 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
20eb0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54   */.  int iSelfT
20ec0 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ab;        /* Ta
20ed0 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ble associated w
20ee0 69 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20  ith an index on 
20ef0 65 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76  expr, or negativ
20f00 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
20f10 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74           ** of t
20f20 68 65 20 62 61 73 65 20 72 65 67 69 73 74 65 72  he base register
20f30 20 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f   during check-co
20f40 6e 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f  nstraint eval */
20f50 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20  .  int nLabel;  
20f60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 2a          /* The *
20f70 6e 65 67 61 74 69 76 65 2a 20 6f 66 20 74 68 65  negative* of the
20f80 20 6e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c   number of label
20f90 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20  s used */.  int 
20fa0 6e 4c 61 62 65 6c 41 6c 6c 6f 63 3b 20 20 20 20  nLabelAlloc;    
20fb0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
20fc0 6f 74 73 20 69 6e 20 61 4c 61 62 65 6c 20 2a 2f  ots in aLabel */
20fd0 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
20fe0 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
20ff0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
21000 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  els */.  ExprLis
21010 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
21020 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
21030 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
21040 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
21050 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
21060 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
21070 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
21080 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
21090 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
210a0 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
210b0 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
210c0 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
210d0 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
210e0 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
210f0 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
21100 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
21110 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
21120 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
21130 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
21140 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
21150 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
21160 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
21170 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
21180 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
21190 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
211a0 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
211b0 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
211c0 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
211d0 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
211e0 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
211f0 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c  am */.  int nSel
21200 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ect;         /* 
21210 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54  Number of SELECT
21220 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72 20   stmts. Counter 
21230 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 49 64  for Select.selId
21240 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
21250 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
21260 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c  ACHE.  int nTabl
21270 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  eLock;        /*
21280 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73   Number of locks
21290 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a   in aTableLock *
212a0 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61  /.  TableLock *a
212b0 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65  TableLock; /* Re
212c0 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63  quired table loc
212d0 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61  ks for shared-ca
212e0 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64  che mode */.#end
212f0 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f  if.  AutoincInfo
21300 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66   *pAinc;  /* Inf
21310 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41  ormation about A
21320 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75  UTOINCREMENT cou
21330 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65  nters */.  Parse
21340 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20   *pToplevel;    
21350 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75  /* Parse structu
21360 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67  re for main prog
21370 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f  ram (or NULL) */
21380 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67  .  Table *pTrigg
21390 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65  erTab;  /* Table
213a0 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65   triggers are be
213b0 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f  ing coded for */
213c0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 65 6e  .  Parse *pParen
213d0 74 50 61 72 73 65 3b 20 2f 2a 20 50 61 72 65 6e  tParse; /* Paren
213e0 74 20 70 61 72 73 65 72 20 69 66 20 74 68 69 73  t parser if this
213f0 20 70 61 72 73 65 72 20 69 73 20 6e 65 73 74 65   parser is neste
21400 64 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  d */.  int addrC
21410 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41  rTab;       /* A
21420 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65  ddress of OP_Cre
21430 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20  ateBtree opcode 
21440 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  on CREATE TABLE 
21450 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c  */.  u32 nQueryL
21460 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74  oop;      /* Est
21470 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61   number of itera
21480 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79  tions of a query
21490 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f   (10*log2(N)) */
214a0 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20  .  u32 oldmask; 
214b0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
214c0 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
214d0 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
214e0 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20   u32 newmask;   
214f0 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
21500 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   new.* columns r
21510 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
21520 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20  8 eTriggerOp;   
21530 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45      /* TK_UPDATE
21540 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54  , TK_INSERT or T
21550 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38  K_DELETE */.  u8
21560 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20   eOrconf;       
21570 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
21580 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
21590 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65   for trigger ste
215a0 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ps */.  u8 disab
215b0 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20  leTriggers;  /* 
215c0 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20  True to disable 
215d0 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f  triggers */..  /
215e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
215f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21600 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21610 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
21630 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73  Fields above mus
21640 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
21650 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66   to zero.  The f
21660 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f  ields that follo
21670 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20  w,.  ** down to 
21680 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
21690 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73   the recursive s
216a0 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e  ection, do not n
216b0 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69  eed to be.  ** i
216c0 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68  nitialized as th
216d0 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62  ey will be set b
216e0 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64  efore being used
216f0 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
21700 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e  is.  ** determin
21710 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50  ed by offsetof(P
21720 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a  arse,aTempReg)..
21730 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
21740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
21780 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d   int aTempReg[8]
21790 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64  ;        /* Hold
217a0 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
217b0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
217c0 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d   */.  Token sNam
217d0 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  eToken;       /*
217e0 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
217f0 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
21800 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20  bject name */.. 
21810 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
21820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21830 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
21860 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e  Above is constan
21870 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73  t between recurs
21880 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20  ions.  Below is 
21890 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64  reset before and
218a0 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68   after.  ** each
218b0 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65   recursion.  The
218c0 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65   boundary betwee
218d0 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69  n these two regi
218e0 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ons is determine
218f0 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66  d.  ** using off
21900 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73  setof(Parse,sLas
21910 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20 73  tToken) so the s
21920 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20  LastToken field 
21930 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a 2a  must be the.  **
21940 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20   first field in 
21950 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65  the recursive re
21960 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  gion..  ********
21970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
219a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
219b0 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74  /..  Token sLast
219c0 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20  Token;       /* 
219d0 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70  The last token p
219e0 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72  arsed */.  ynVar
219f0 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20   nVar;          
21a00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21a10 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
21a20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
21a30 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 69  so far */.  u8 i
21a40 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  PkSortOrder;    
21a50 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20        /* ASC or 
21a60 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52  DESC for INTEGER
21a70 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
21a80 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20    u8 explain;   
21a90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
21aa0 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41  rue if the EXPLA
21ab0 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64  IN flag is found
21ac0 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f   on the query */
21ad0 0a 23 69 66 20 21 28 64 65 66 69 6e 65 64 28 53  .#if !(defined(S
21ae0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21af0 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69  ALTABLE) && defi
21b00 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
21b10 41 4c 54 45 52 54 41 42 4c 45 29 29 0a 20 20 75  ALTERTABLE)).  u
21b20 38 20 65 50 61 72 73 65 4d 6f 64 65 3b 20 20 20  8 eParseMode;   
21b30 20 20 20 20 20 20 20 20 20 2f 2a 20 50 41 52 53           /* PARS
21b40 45 5f 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74  E_MODE_XXX const
21b50 61 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ant */.#endif.#i
21b60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21b70 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
21b80 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20   int nVtabLock; 
21b90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
21ba0 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
21bb0 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a  tables to lock *
21bc0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e  /.#endif.  int n
21bd0 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
21be0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
21bf0 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
21c00 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
21c10 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
21c20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
21c30 41 49 4e 0a 20 20 69 6e 74 20 61 64 64 72 45 78  AIN.  int addrEx
21c40 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20  plain;          
21c50 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 63 75  /* Address of cu
21c60 72 72 65 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e  rrent OP_Explain
21c70 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
21c80 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73  f.  VList *pVLis
21c90 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
21ca0 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e   Mapping between
21cb0 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20   variable names 
21cc0 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20  and numbers */. 
21cd0 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
21ce0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
21cf0 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
21d00 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
21d10 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73  are()) */.  cons
21d20 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
21d30 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
21d40 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
21d50 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
21d60 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
21d70 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
21d80 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
21d90 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
21da0 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
21db0 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
21dc0 77 49 6e 64 65 78 3b 20 20 20 20 20 20 20 20 20  wIndex;         
21dd0 2f 2a 20 41 6e 20 69 6e 64 65 78 20 62 65 69 6e  /* An index bein
21de0 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
21df0 20 43 52 45 41 54 45 20 49 4e 44 45 58 2e 0a 20   CREATE INDEX.. 
21e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e10 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 6c             ** Al
21e20 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  so used to hold 
21e30 72 65 64 75 6e 64 61 6e 74 20 55 4e 49 51 55 45  redundant UNIQUE
21e40 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20 20   constraints.   
21e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e60 20 20 20 20 20 20 20 20 20 2a 2a 20 64 75 72 69           ** duri
21e70 6e 67 20 61 20 52 45 4e 41 4d 45 20 43 4f 4c 55  ng a RENAME COLU
21e80 4d 4e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  MN */.  Trigger 
21e90 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
21ea0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
21eb0 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
21ec0 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
21ed0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
21ee0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
21ef0 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
21f00 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
21f10 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23  h callbacks */.#
21f20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21f30 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
21f40 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
21f50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
21f60 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
21f70 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
21f80 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
21f90 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
21fa0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
21fb0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
21fc0 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
21fd0 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
21fe0 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
21ff0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
22000 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
22010 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
22020 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
22030 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
22040 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
22050 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
22060 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
22070 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
22080 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
22090 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
220a0 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a  NULL */.  With *
220b0 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20  pWithToFree;    
220c0 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73      /* Free this
220d0 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20   WITH object at 
220e0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
220f0 61 72 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20  arse */.#ifndef 
22100 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
22110 52 54 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65 54  RTABLE.  RenameT
22120 6f 6b 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20 20  oken *pRename;  
22130 20 20 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75 62     /* Tokens sub
22140 6a 65 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e 67  ject to renaming
22150 20 62 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20   by ALTER TABLE 
22160 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64  */.#endif.};..#d
22170 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45  efine PARSE_MODE
22180 5f 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 30  _NORMAL        0
22190 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d  .#define PARSE_M
221a0 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42  ODE_DECLARE_VTAB
221b0 20 20 31 0a 23 64 65 66 69 6e 65 20 50 41 52 53    1.#define PARS
221c0 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f  E_MODE_RENAME_CO
221d0 4c 55 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20 50  LUMN 2.#define P
221e0 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45  ARSE_MODE_RENAME
221f0 5f 54 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a  _TABLE  3../*.**
22200 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74   Sizes and point
22210 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70  ers of various p
22220 61 72 74 73 20 6f 66 20 74 68 65 20 50 61 72 73  arts of the Pars
22230 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65  e object..*/.#de
22240 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53  fine PARSE_HDR_S
22250 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  Z offsetof(Parse
22260 2c 61 54 65 6d 70 52 65 67 29 20 2f 2a 20 52 65  ,aTempReg) /* Re
22270 63 75 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f  cursive part w/o
22280 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65   aColCache*/.#de
22290 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52  fine PARSE_RECUR
222a0 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50  SE_SZ offsetof(P
222b0 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29  arse,sLastToken)
222c0 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65      /* Recursive
222d0 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
222e0 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28   PARSE_TAIL_SZ (
222f0 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41  sizeof(Parse)-PA
22300 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
22310 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65  /* Non-recursive
22320 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
22330 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28   PARSE_TAIL(X) (
22340 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52  ((char*)(X))+PAR
22350 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20  SE_RECURSE_SZ)  
22360 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61  /* Pointer to ta
22370 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  il */../*.** Ret
22380 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72  urn true if curr
22390 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20  ently inside an 
223a0 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
223b0 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a  vtab() call..*/.
223c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
223d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
223e0 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
223f0 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73  LARE_VTAB 0.#els
22400 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  e.  #define IN_D
22410 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61  ECLARE_VTAB (pPa
22420 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3d  rse->eParseMode=
22430 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c  =PARSE_MODE_DECL
22440 41 52 45 5f 56 54 41 42 29 0a 23 65 6e 64 69 66  ARE_VTAB).#endif
22450 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
22460 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
22470 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20  ABLE).  #define 
22480 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54  IN_RENAME_OBJECT
22490 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
224a0 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a  ne IN_RENAME_OBJ
224b0 45 43 54 20 28 70 50 61 72 73 65 2d 3e 65 50 61  ECT (pParse->ePa
224c0 72 73 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f 4d  rseMode>=PARSE_M
224d0 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d  ODE_RENAME_COLUM
224e0 4e 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  N).#endif..#if d
224f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
22500 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
22510 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
22520 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
22530 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  LE).  #define IN
22540 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20 30  _SPECIAL_PARSE 0
22550 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
22560 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53   IN_SPECIAL_PARS
22570 45 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73  E (pParse->ePars
22580 65 4d 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f 44  eMode!=PARSE_MOD
22590 45 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69 66  E_NORMAL).#endif
225a0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
225b0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
225c0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
225d0 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
225e0 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
225f0 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
22600 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
22610 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
22620 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
22630 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
22640 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
22650 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
22660 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
22670 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
22680 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
22690 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
226a0 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
226b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
226c0 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
226d0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
226e0 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
226f0 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69  P5 value in vari
22700 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a  ous opcodes..**.
22710 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
22720 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
22730 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
22740 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54      OPFLAG_LENGT
22750 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  HARG    == SQLIT
22760 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a  E_FUNC_LENGTH.**
22770 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f      OPFLAG_TYPEO
22780 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  FARG    == SQLIT
22790 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a  E_FUNC_TYPEOF.**
227a0 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43      OPFLAG_BULKC
227b0 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45  SR      == BTREE
227c0 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20  _BULKLOAD.**    
227d0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
227e0 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45      == BTREE_SEE
227f0 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  K_EQ.**    OPFLA
22800 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d  G_FORDELETE    =
22810 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  = BTREE_FORDELET
22820 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  E.**    OPFLAG_S
22830 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42  AVEPOSITION == B
22840 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f  TREE_SAVEPOSITIO
22850 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41  N.**    OPFLAG_A
22860 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  UXDELETE    == B
22870 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a  TREE_AUXDELETE.*
22880 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22890 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
228a0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73  x01    /* OP_Ins
228b0 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61  ert: Set to upda
228c0 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
228d0 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
228e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228f0 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75         /* Also u
22900 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50  sed in P2 (not P
22910 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20  5) of OP_Delete 
22920 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22930 47 5f 4e 4f 43 48 4e 47 20 20 20 20 20 20 20 20  G_NOCHNG        
22940 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56 43  0x01    /* OP_VC
22950 6f 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20 66  olumn nochange f
22960 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
22970 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45  fine OPFLAG_EPHE
22980 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20  M         0x01  
22990 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20    /* OP_Column: 
229a0 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74  Ephemeral output
229b0 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e   is ok */.#defin
229c0 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
229d0 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20 2f  ID     0x20    /
229e0 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
229f0 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f  db->lastRowid */
22a00 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22a10 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78  ISUPDATE      0x
22a20 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50  04    /* This OP
22a30 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71  _Insert is an sq
22a40 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  l UPDATE */.#def
22a50 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  ine OPFLAG_APPEN
22a60 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20  D        0x08   
22a70 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65   /* This is like
22a80 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
22a90 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  nd */.#define OP
22aa0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
22ab0 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72  LT 0x10    /* Tr
22ac0 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65  y to avoid a see
22ad0 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74  k in BtreeInsert
22ae0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
22af0 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20  FLAG_ISNOOP     
22b00 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
22b10 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65  _Delete does pre
22b20 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c  -update-hook onl
22b30 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  y */.#define OPF
22b40 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
22b50 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
22b60 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
22b70 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
22b80 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22b90 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
22ba0 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
22bb0 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
22bc0 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
22bd0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
22be0 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
22bf0 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
22c00 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
22c10 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
22c20 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  ne OPFLAG_SEEKEQ
22c30 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20          0x02    
22c40 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72  /* OP_Open** cur
22c50 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b  sor uses EQ seek
22c60 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
22c70 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
22c80 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a  E     0x08    /*
22c90 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20   OP_Open should 
22ca0 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c  use BTREE_FORDEL
22cb0 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE */.#define O
22cc0 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20  PFLAG_P2ISREG   
22cd0 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50      0x10    /* P
22ce0 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69  2 to OP_Open** i
22cf0 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d  s a register num
22d00 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ber */.#define O
22d10 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20  PFLAG_PERMUTE   
22d20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
22d30 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74  P_Compare: use t
22d40 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
22d50 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22d60 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30  _SAVEPOSITION  0
22d70 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x02    /* OP_Del
22d80 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65  ete/Insert: save
22d90 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23   cursor pos */.#
22da0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55  define OPFLAG_AU
22db0 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 34  XDELETE     0x04
22dc0 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
22dd0 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c  : index in a DEL
22de0 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e  ETE op */.#defin
22df0 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f  e OPFLAG_NOCHNG_
22e00 4d 41 47 49 43 20 20 30 78 36 64 20 20 20 20 2f  MAGIC  0x6d    /
22e10 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a  * OP_MakeRecord:
22e20 20 73 65 72 69 61 6c 74 79 70 65 20 31 30 20 69   serialtype 10 i
22e30 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  s ok */../*. * E
22e40 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
22e50 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
22e60 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
22e70 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
22e80 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
22e90 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20   Trigger.. *. * 
22ea0 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
22eb0 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
22ec0 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
22ed0 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
22ee0 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
22ef0 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
22f00 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
22f10 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
22f20 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20  presents the. * 
22f30 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
22f40 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
22f50 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
22f60 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
22f70 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
22f80 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
22f90 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
22fa0 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
22fb0 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
22fc0 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
22fd0 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
22fe0 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
22ff0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
23000 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
23010 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
23020 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
23030 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
23040 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
23050 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
23060 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
23070 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
23080 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
23090 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
230a0 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
230b0 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
230c0 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
230d0 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
230e0 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
230f0 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
23100 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
23110 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
23120 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
23130 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
23140 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
23150 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
23160 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
23170 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
23180 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
23190 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
231a0 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
231b0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
231c0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
231d0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
231e0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
231f0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
23200 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
23210 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
23220 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
23230 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
23240 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
23250 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
23260 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
23270 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
23280 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
23290 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
232a0 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
232b0 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
232c0 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
232d0 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
232e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232f0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
23300 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
23310 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
23320 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
23330 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
23340 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
23350 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
23360 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
23370 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
23380 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
23390 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
233a0 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
233b0 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
233c0 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
233d0 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
233e0 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
233f0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
23400 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
23410 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
23420 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
23430 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
23440 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
23450 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
23460 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
23470 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
23480 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
23490 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  which..**.** If 
234a0 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
234b0 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
234c0 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
234d0 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
234e0 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
234f0 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
23500 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
23510 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
23520 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
23530 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
23540 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
23550 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
23560 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
23570 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
23580 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
23590 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
235a0 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
235b0 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
235c0 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
235d0 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65  .. *. * Instance
235e0 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
235f0 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
23600 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
23610 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
23620 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
23630 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
23640 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
23650 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
23660 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61  mber of the. * a
23670 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74  ssociated struct
23680 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63   Trigger instanc
23690 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  e. The first ele
236a0 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b  ment of the link
236b0 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68  ed list is. * th
236c0 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20  e first step of 
236d0 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67  the trigger-prog
236e0 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ram.. *. * The "
236f0 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63  op" member indic
23700 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69  ates whether thi
23710 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c  s is a "DELETE",
23720 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41   "INSERT", "UPDA
23730 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43  TE" or. * "SELEC
23740 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  T" statement. Th
23750 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
23760 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20  e other members 
23770 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
23780 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66   the. * value of
23790 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73   "op" as follows
237a0 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  :. *. * (op == T
237b0 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63  K_INSERT). * orc
237c0 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73  onf    -> stores
237d0 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
237e0 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53   algorithm. * pS
237f0 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68  elect   -> If th
23800 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
23810 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
23820 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
23830 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
23840 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
23850 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
23860 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
23870 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  t. Otherwise NUL
23880 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  L.. * zTarget   
23890 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
238a0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
238b0 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a   insert into.. *
238c0 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66   pExprList -> If
238d0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
238e0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55  RT INTO ... VALU
238f0 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  ES ... statement
23900 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
23910 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
23920 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  es values to be 
23930 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77  inserted. Otherw
23940 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64  ise NULL.. * pId
23950 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69  List   -> If thi
23960 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
23970 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e  NTO ... (<column
23980 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20  -names>) VALUES 
23990 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .... *          
239a0 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
239b0 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
239c0 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
239d0 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
239e0 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
239f0 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
23a00 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
23a10 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
23a20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
23a30 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
23a40 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
23a50 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
23a60 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
23a70 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
23a80 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
23a90 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
23aa0 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
23ab0 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70   NULL.. *. * (op
23ac0 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20   == TK_UPDATE). 
23ad0 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
23ae0 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
23af0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64  the table to upd
23b00 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  ate.. * pWhere  
23b10 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
23b20 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44  lause of the UPD
23b30 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ATE statement if
23b40 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
23b50 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
23b60 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
23b70 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  L.. * pExprList 
23b80 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65  -> A list of the
23b90 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61   columns to upda
23ba0 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65  te and the expre
23bb0 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65  ssions to update
23bc0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23bd0 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71   them to. See sq
23be0 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f  lite3Update() do
23bf0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22  cumentation of "
23c00 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20  pChanges". *    
23c10 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
23c20 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63  nt.. *. */.struc
23c30 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
23c40 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
23c50 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
23c60 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
23c70 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
23c80 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
23c90 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
23ca0 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
23cb0 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
23cc0 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
23cd0 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
23ce0 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
23cf0 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
23d00 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
23d10 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
23d20 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  CT statement or 
23d30 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
23d40 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  TO SELECT ... */
23d50 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74  .  char *zTarget
23d60 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65  ;       /* Targe
23d70 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
23d80 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
23d90 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
23da0 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
23db0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
23dc0 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
23dd0 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
23de0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
23df0 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
23e00 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a  use for UPDATE *
23e10 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c  /.  IdList *pIdL
23e20 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75  ist;     /* Colu
23e30 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53  mn names for INS
23e40 45 52 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20  ERT */.  Upsert 
23e50 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a  *pUpsert;     /*
23e60 20 55 70 73 65 72 74 20 63 6c 61 75 73 65 73 20   Upsert clauses 
23e70 6f 6e 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a  on an INSERT */.
23e80 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
23e90 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e         /* Origin
23ea0 61 6c 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74  al SQL text of t
23eb0 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
23ec0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e   TriggerStep *pN
23ed0 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e  ext;  /* Next in
23ee0 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a   the link-list *
23ef0 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
23f00 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74  *pLast;  /* Last
23f10 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b   element in link
23f20 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72  -list. Valid for
23f30 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a   1st elem only *
23f40 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
23f50 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
23f60 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
23f70 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79  ormation used by
23f80 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e   the sqliteFix..
23f90 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73  ..** routines as
23fa0 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70   they walk the p
23fb0 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b  arse tree to mak
23fc0 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72  e database refer
23fd0 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69  ences.** explici
23fe0 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  t..*/.typedef st
23ff0 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46  ruct DbFixer DbF
24000 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46  ixer;.struct DbF
24010 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  ixer {.  Parse *
24020 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20  pParse;      /* 
24030 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74  The parsing cont
24040 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73  ext.  Error mess
24050 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72  ages written her
24060 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
24070 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69  Schema;    /* Fi
24080 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20  x items to this 
24090 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
240a0 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20  bVarOnly;       
240b0 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72  /* Check for var
240c0 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73  iable references
240d0 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74   only */.  const
240e0 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f   char *zDb;    /
240f0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
24100 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74  objects are cont
24110 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61  ained in this da
24120 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
24130 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20  t char *zType;  
24140 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63  /* Type of the c
24150 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
24160 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
24170 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f  es */.  const To
24180 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e  ken *pName; /* N
24190 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ame of the conta
241a0 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
241b0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
241c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  /.};../*.** An o
241d0 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20  bjected used to 
241e0 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74  accumulate the t
241f0 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ext of a string 
24200 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e  where we.** do n
24210 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
24220 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20  now how big the 
24230 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69  string will be i
24240 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  n the end..*/.st
24250 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72  ruct sqlite3_str
24260 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
24270 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74  ;         /* Opt
24280 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66  ional database f
24290 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43  or lookaside.  C
242a0 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  an be NULL */.  
242b0 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
242c0 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
242d0 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
242e0 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41  far */.  u32  nA
242f0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  lloc;         /*
24300 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65   Amount of space
24310 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54   allocated in zT
24320 65 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78  ext */.  u32  mx
24330 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
24340 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64   Maximum allowed
24350 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20   allocation.  0 
24360 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73  for no malloc us
24370 61 67 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43  age */.  u32  nC
24380 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
24390 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
243a0 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
243b0 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b    u8   accError;
243c0 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
243d0 5f 4e 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45  _NOMEM or SQLITE
243e0 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20  _TOOBIG */.  u8 
243f0 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20    printfFlags;  
24400 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e    /* SQLITE_PRIN
24410 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a  TF flags below *
24420 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  /.};.#define SQL
24430 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52  ITE_PRINTF_INTER
24440 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74  NAL 0x01  /* Int
24450 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63  ernal-use-only c
24460 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65  onverters allowe
24470 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
24480 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55  ITE_PRINTF_SQLFU
24490 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c  NC  0x02  /* SQL
244a0 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
244b0 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20  nts to VXPrintf 
244c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
244d0 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
244e0 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20  D 0x04  /* True 
244f0 69 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f  if xText is allo
24500 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a  cated space */..
24510 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63  #define isMalloc
24520 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72  ed(X)  (((X)->pr
24530 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49  intfFlags & SQLI
24540 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43  TE_PRINTF_MALLOC
24550 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20  ED)!=0).../*.** 
24560 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
24570 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
24580 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
24590 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
245a0 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
245b0 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
245c0 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
245d0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
245e0 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
245f0 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
24600 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
24610 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
24620 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
24630 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
24640 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
24650 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
24660 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
24670 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
24680 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
24690 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
246a0 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
246b0 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
246c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
246d0 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
246e0 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 33  red here */.  u3
246f0 32 20 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20 20  2 mInitFlags;   
24700 20 20 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72    /* Flags contr
24710 6f 6c 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65 73  olling error mes
24720 73 61 67 65 73 20 2a 2f 0a 20 20 75 33 32 20 6e  sages */.  u32 n
24730 49 6e 69 74 52 6f 77 3b 20 20 20 20 20 20 20 2f  InitRow;       /
24740 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  * Number of rows
24750 20 70 72 6f 63 65 73 73 65 64 20 2a 2f 0a 7d 20   processed */.} 
24760 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
24770 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
24780 66 6f 72 20 6d 49 6e 69 74 46 6c 61 67 73 0a 2a  for mInitFlags.*
24790 2f 0a 23 64 65 66 69 6e 65 20 49 4e 49 54 46 4c  /.#define INITFL
247a0 41 47 5f 41 6c 74 65 72 54 61 62 6c 65 20 20 20  AG_AlterTable   
247b0 30 78 30 30 30 31 20 20 2f 2a 20 54 68 69 73 20  0x0001  /* This 
247c0 69 73 20 61 20 72 65 70 61 72 73 65 20 61 66 74  is a reparse aft
247d0 65 72 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a  er ALTER TABLE *
247e0 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75  /../*.** Structu
247f0 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c  re containing gl
24800 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
24810 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  on data for the 
24820 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
24830 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
24840 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69  ture also contai
24850 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e  ns some state in
24860 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
24870 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
24880 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73  ig {.  int bMems
24890 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  tat;            
248a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
248b0 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72   to enable memor
248c0 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e  y status */.  in
248d0 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20  t bCoreMutex;   
248e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248f0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
24900 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20  e core mutexing 
24910 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75  */.  int bFullMu
24920 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
24930 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
24940 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75  o enable full mu
24950 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
24960 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20  bOpenUri;       
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24980 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72   True to interpr
24990 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20  et filenames as 
249a0 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55  URIs */.  int bU
249b0 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20  seCis;          
249c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
249d0 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69  se covering indi
249e0 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61  ces for full-sca
249f0 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 62 53 6d 61  ns */.  int bSma
24a00 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20  llMalloc;       
24a10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 6f            /* Avo
24a20 69 64 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20  id large memory 
24a30 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20 74  allocations if t
24a40 72 75 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  rue */.  int mxS
24a50 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
24a60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
24a70 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
24a80 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76  gth */.  int nev
24a90 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20  erCorrupt;      
24aa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
24ab0 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73  tabase is always
24ac0 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a   well-formed */.
24ad0 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
24ae0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
24af0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
24b00 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
24b10 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
24b20 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
24b30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
24b40 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
24b50 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
24b60 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c  .  int nStmtSpil
24b70 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
24b80 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75       /* Stmt-jou
24b90 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69  rnal spill-to-di
24ba0 73 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a  sk threshold */.
24bb0 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65    sqlite3_mem_me
24bc0 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20  thods m;        
24bd0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
24be0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
24bf0 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  on interface */.
24c00 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
24c10 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20  methods mutex;  
24c20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
24c30 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65   mutex interface
24c40 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63   */.  sqlite3_pc
24c50 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63  ache_methods2 pc
24c60 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c  ache2;  /* Low-l
24c70 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20  evel page-cache 
24c80 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76  interface */.  v
24c90 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20  oid *pHeap;     
24ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cb0 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65   /* Heap storage
24cc0 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
24cd0 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  nHeap;          
24ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24cf0 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d   Size of pHeap[]
24d00 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c   */.  int mnReq,
24d10 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20   mxReq;         
24d20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61          /* Min a
24d30 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75  nd max heap requ
24d40 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20  ests sizes */.  
24d50 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
24d60 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
24d70 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63    /* mmap() spac
24d80 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20  e per open file 
24d90 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
24da0 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20  64 mxMmap;      
24db0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
24dc0 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d  m value for szMm
24dd0 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ap */.  void *pP
24de0 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
24df0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
24e00 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
24e10 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
24e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e30 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
24e40 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
24e50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
24e60 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
24e70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24e80 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
24e90 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
24ea0 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
24eb0 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
24ec0 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
24ed0 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
24ee0 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
24ef0 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
24f00 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
24f10 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
24f20 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
24f30 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d  ed */.  u32 szPm
24f40 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
24f50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
24f60 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20  imum Sorter PMA 
24f70 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  size */.  /* The
24f80 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
24f90 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
24fa0 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
24fb0 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
24fc0 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
24fd0 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
24fe0 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
24ff0 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25010 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
25020 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
25030 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
25040 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
25050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25060 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
25070 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
25080 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
25090 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
250a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250b0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
250c0 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
250d0 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
250e0 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
250f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25100 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
25110 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
25120 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
25130 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
25140 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
25150 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
25160 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
25170 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
25180 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
25190 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
251a0 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
251b0 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  tex */.  sqlite3
251c0 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
251d0 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
251e0 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
251f0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
25200 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
25210 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
25220 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
25230 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
25240 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
25250 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25270 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
25280 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64  o xLog() */.#ifd
25290 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
252a0 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
252b0 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
252c0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
252d0 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
252e0 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
252f0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
25300 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
25310 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  E.  /* The follo
25320 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69  wing callback (i
25330 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69  f not NULL) is i
25340 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20  nvoked on every 
25350 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a  VDBE branch.  **
25360 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74   operation.  Set
25370 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73   the callback us
25380 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ing SQLITE_TESTC
25390 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  TRL_VDBE_COVERAG
253a0 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28  E..  */.  void (
253b0 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f  *xVdbeBranch)(vo
253c0 69 64 2a 2c 75 6e 73 69 67 6e 65 64 20 69 53 72  id*,unsigned iSr
253d0 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75  cLine,u8 eThis,u
253e0 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c  8 eMx);  /* Call
253f0 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
25400 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20  pVdbeBranchArg; 
25410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25430 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
25440 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ent */.#endif.#i
25450 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
25460 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 20  LE_DESERIALIZE. 
25470 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
25480 78 4d 65 6d 64 62 53 69 7a 65 3b 20 20 20 20 20  xMemdbSize;     
25490 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 61     /* Default ma
254a0 78 20 6d 65 6d 64 62 20 73 69 7a 65 20 2a 2f 0a  x memdb size */.
254b0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
254c0 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
254d0 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61  .  int (*xTestCa
254e0 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20  llback)(int);   
254f0 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20       /* Invoked 
25500 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  by sqlite3FaultS
25510 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  im() */.#endif. 
25520 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
25530 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
25540 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
25550 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
25560 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 62 49  alls */.  int bI
25570 6e 74 65 72 6e 61 6c 46 75 6e 63 74 69 6f 6e 73  nternalFunctions
25580 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
25590 6e 74 65 72 6e 61 6c 20 53 51 4c 20 66 75 6e 63  nternal SQL func
255a0 74 69 6f 6e 73 20 61 72 65 20 76 69 73 69 62 6c  tions are visibl
255b0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65  e */.  int iOnce
255c0 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20  ResetThreshold; 
255d0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e           /* When
255e0 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63   to reset OP_Onc
255f0 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  e counters */.  
25600 75 33 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b  u32 szSorterRef;
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25620 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e    /* Min size in
25630 20 62 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f   bytes to use so
25640 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b 0a  rter-refs */.};.
25650 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
25660 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
25670 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
25680 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
25690 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
256a0 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
256b0 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
256c0 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
256d0 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
256e0 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
256f0 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
25700 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
25710 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
25720 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
25730 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
25740 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
25750 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
25760 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
25770 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
25780 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
25790 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
257a0 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
257b0 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
257c0 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
257d0 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
257e0 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
257f0 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
25800 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
25810 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
25820 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
25830 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
25840 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
25850 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
25860 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
25870 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
25880 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
25890 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
258a0 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
258b0 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
258c0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
258d0 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
258e0 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
258f0 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
25900 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50  uct Walker {.  P
25910 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
25920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25930 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
25940 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
25950 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
25960 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
25970 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
25980 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
25990 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
259a0 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
259b0 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
259c0 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
259d0 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
259e0 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
259f0 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
25a00 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
25a10 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
25a20 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
25a30 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
25a40 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
25a50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
25a60 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
25a70 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64  ies */.  u8 eCod
25a80 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
25a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25aa0 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72     /* A small pr
25ab0 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f  ocessing code */
25ac0 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25af0 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
25b00 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
25b10 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
25b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
25b40 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
25b50 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
25b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
25b80 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20   counter */.    
25b90 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20  int iCur;       
25ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
25bc0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
25bd0 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
25be0 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
25bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25c00 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
25c10 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
25c20 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
25c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25c40 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
25c50 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
25c60 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69     struct CCurHi
25c70 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20  nt *pCCurHint;  
25c80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25c90 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73  Used by codeCurs
25ca0 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20  orHint() */.    
25cb0 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20  int *aiCol;     
25cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72            /* arr
25ce0 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64  ay of column ind
25cf0 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  exes */.    stru
25d00 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64  ct IdxCover *pId
25d10 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20  xCover;         
25d20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
25d30 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67  or index coverag
25d40 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
25d50 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49  IdxExprTrans *pI
25d60 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  dxTrans;        
25d70 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64     /* Convert id
25d80 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75  xed expr to colu
25d90 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  mn */.    ExprLi
25da0 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
25db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dc0 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20      /* GROUP BY 
25dd0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53 65  clause */.    Se
25de0 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
25df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e00 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e          /* HAVIN
25e10 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73  G to WHERE claus
25e20 65 20 63 74 78 20 2a 2f 0a 20 20 20 20 73 74 72  e ctx */.    str
25e30 75 63 74 20 57 69 6e 64 6f 77 52 65 77 72 69 74  uct WindowRewrit
25e40 65 20 2a 70 52 65 77 72 69 74 65 3b 20 20 20 20  e *pRewrite;    
25e50 20 20 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f 77         /* Window
25e60 20 72 65 77 72 69 74 65 20 63 6f 6e 74 65 78 74   rewrite context
25e70 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57   */.    struct W
25e80 68 65 72 65 43 6f 6e 73 74 20 2a 70 43 6f 6e 73  hereConst *pCons
25e90 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
25ea0 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
25eb0 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20  e constants */. 
25ec0 20 20 20 73 74 72 75 63 74 20 52 65 6e 61 6d 65     struct Rename
25ed0 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20  Ctx *pRename;   
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25ef0 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 63 6f  RENAME COLUMN co
25f00 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ntext */.  } u;.
25f10 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
25f20 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
25f30 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
25f40 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
25f50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
25f60 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
25f70 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
25f80 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
25f90 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
25fa0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25fb0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
25fc0 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
25fd0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
25fe0 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
25ff0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
26000 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
26010 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b  xprWalkNoop(Walk
26020 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
26030 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
26040 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
26050 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
26060 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46  lite3SelectWalkF
26070 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ail(Walker*, Sel
26080 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  ect*);.#ifdef SQ
26090 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20  LITE_DEBUG.void 
260a0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
260b0 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a  kAssert2(Walker*
260c0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64  , Select*);.#end
260d0 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
260e0 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70   code from the p
260f0 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e  arse-tree walkin
26100 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64  g primitives and
26110 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61   their.** callba
26120 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  cks..*/.#define 
26130 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20  WRC_Continue    
26140 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20  0   /* Continue 
26150 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72  down into childr
26160 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  en */.#define WR
26170 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20  C_Prune       1 
26180 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72    /* Omit childr
26190 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20  en but continue 
261a0 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73  walking siblings
261b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
261c0 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20  Abort       2   
261d0 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74  /* Abandon the t
261e0 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a  ree walk */../*.
261f0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
26200 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
26210 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
26220 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  t of one or more
26230 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e   CTEs.** (common
26240 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
26250 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61  ns) created by a
26260 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
26270 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  use..*/.struct W
26280 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65  ith {.  int nCte
26290 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
262a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
262b0 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65  r of CTEs in the
262c0 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a   WITH clause */.
262d0 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20    With *pOuter; 
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262f0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20    /* Containing 
26300 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
26310 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74  NULL */.  struct
26320 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20   Cte {          
26330 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
26340 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65   each CTE in the
26350 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e   WITH clause....
26360 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
26370 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
26380 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
26390 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
263a0 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f     ExprList *pCo
263b0 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ls;             
263c0 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78     /* List of ex
263d0 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61  plicit column na
263e0 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  mes, or NULL */.
263f0 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
26400 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
26410 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e      /* The defin
26420 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54  ition of this CT
26430 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63  E */.    const c
26440 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20  har *zCteErr;   
26450 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
26460 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69  r message for ci
26470 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65  rcular reference
26480 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d  s */.  } a[1];.}
26490 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
264a0 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20  _DEBUG./*.** An 
264b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
264c0 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20  TreeView object 
264d0 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e  is used for prin
264e0 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
264f0 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75   of.** data stru
26500 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65  ctures on sqlite
26510 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75  3DebugPrintf() u
26520 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65  sing a tree-like
26530 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74   view..*/.struct
26540 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e   TreeView {.  in
26550 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
26560 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c        /* Which l
26570 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65  evel of the tree
26580 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20   we are on */.  
26590 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20  u8  bLine[100]; 
265a0 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20          /* Draw 
265b0 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75  vertical in colu
265c0 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d  mn i if bLine[i]
265d0 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23   is true */.};.#
265e0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
265f0 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  DEBUG */../*.** 
26600 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 75  This object is u
26610 73 65 64 20 69 6e 20 76 61 72 69 6f 69 75 73 20  sed in varioius 
26620 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61 74 65  ways, all relate
26630 64 20 74 6f 20 77 69 6e 64 6f 77 20 66 75 6e 63  d to window func
26640 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 28 31  tions.**.**   (1
26650 29 20 41 20 73 69 6e 67 6c 65 20 69 6e 73 74 61  ) A single insta
26660 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
26670 63 74 75 72 65 20 69 73 20 61 74 74 61 63 68 65  cture is attache
26680 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20  d to the.**     
26690 20 20 74 68 65 20 45 78 70 72 2e 70 57 69 6e 20    the Expr.pWin 
266a0 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20 77  field for each w
266b0 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69  indow function i
266c0 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  n an expression 
266d0 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54  tree..**       T
266e0 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
266f0 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   the information
26700 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
26710 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a  e OVER clause,.*
26720 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61 64 64  *       plus add
26730 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75  itional fields u
26740 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65 20  sed during code 
26750 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  generation..**.*
26760 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e 64  *   (2) All wind
26770 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  ow functions in 
26780 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
26790 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  form a linked-li
267a0 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74 61  st.**       atta
267b0 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70  ched to Select.p
267c0 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f 77  Win.  The Window
267d0 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f  .pFunc and Windo
267e0 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20 20  w.pExpr.**      
267f0 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62 61   fields point ba
26800 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65 73  ck to the expres
26810 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  sion that is the
26820 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
26830 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68  ..**.**   (3) Th
26840 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 57  e terms of the W
26850 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66 20  INDOW clause of 
26860 61 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e 73  a SELECT are ins
26870 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a 2a  tances of this.*
26880 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f  *       object o
26890 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
268a0 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65  attached to Sele
268b0 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a  ct.pWinDefn..**.
268c0 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31 29 20  ** The uses (1) 
268d0 61 6e 64 20 28 32 29 20 61 72 65 20 72 65 61 6c  and (2) are real
268e0 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64  ly the same Wind
268f0 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a  ow object that j
26900 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74  ust happens.** t
26910 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c 65 20  o be accessible 
26920 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74  in two different
26930 20 77 61 79 73 2e 20 20 55 73 65 20 28 33 29 20   ways.  Use (3) 
26940 69 73 20 61 72 65 20 73 65 70 61 72 61 74 65 20  is are separate 
26950 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
26960 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68  ct Window {.  ch
26970 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
26980 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
26990 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62 65 20   window (may be 
269a0 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c  NULL) */.  ExprL
269b0 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b  ist *pPartition;
269c0 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20     /* PARTITION 
269d0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
269e0 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
269f0 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52 20  y;     /* ORDER 
26a00 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  BY clause */.  u
26a10 38 20 65 54 79 70 65 3b 20 20 20 20 20 20 20 20  8 eType;        
26a20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e         /* TK_RAN
26a30 47 45 20 6f 72 20 54 4b 5f 52 4f 57 53 20 2a 2f  GE or TK_ROWS */
26a40 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20 20 20  .  u8 eStart;   
26a50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e             /* UN
26a60 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54  BOUNDED, CURRENT
26a70 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46  , PRECEDING or F
26a80 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38  OLLOWING */.  u8
26a90 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20   eEnd;          
26aa0 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44        /* UNBOUND
26ab0 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45  ED, CURRENT, PRE
26ac0 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57  CEDING or FOLLOW
26ad0 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ING */.  Expr *p
26ae0 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
26af0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66   /* Expression f
26b00 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45 43 45  or "<expr> PRECE
26b10 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72 20  DING" */.  Expr 
26b20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
26b30 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
26b40 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c   for "<expr> FOL
26b50 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e  LOWING" */.  Win
26b60 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20  dow *pNextWin;  
26b70 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e       /* Next win
26b80 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c  dow function bel
26b90 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69 73 20 53  onging to this S
26ba0 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70 72 20  ELECT */.  Expr 
26bb0 2a 70 46 69 6c 74 65 72 3b 20 20 20 20 20 20 20  *pFilter;       
26bc0 20 20 20 2f 2a 20 54 68 65 20 46 49 4c 54 45 52     /* The FILTER
26bd0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
26be0 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
26bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
26c00 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  function */.  in
26c10 74 20 69 45 70 68 43 73 72 3b 20 20 20 20 20 20  t iEphCsr;      
26c20 20 20 20 20 20 20 2f 2a 20 50 61 72 74 69 74 69        /* Partiti
26c30 6f 6e 20 62 75 66 66 65 72 20 6f 72 20 50 65 65  on buffer or Pee
26c40 72 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  r buffer */.  in
26c50 74 20 72 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e  t regAccum;.  in
26c60 74 20 72 65 67 52 65 73 75 6c 74 3b 0a 20 20 69  t regResult;.  i
26c70 6e 74 20 63 73 72 41 70 70 3b 20 20 20 20 20 20  nt csrApp;      
26c80 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69         /* Functi
26c90 6f 6e 20 63 75 72 73 6f 72 20 28 75 73 65 64 20  on cursor (used 
26ca0 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20  by min/max) */. 
26cb0 20 69 6e 74 20 72 65 67 41 70 70 3b 20 20 20 20   int regApp;    
26cc0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63           /* Func
26cd0 74 69 6f 6e 20 72 65 67 69 73 74 65 72 20 28 61  tion register (a
26ce0 6c 73 6f 20 75 73 65 64 20 62 79 20 6d 69 6e 2f  lso used by min/
26cf0 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65  max) */.  int re
26d00 67 50 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  gPart;          
26d10 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 20 61 20    /* First in a 
26d20 73 65 74 20 6f 66 20 72 65 67 69 73 74 65 72 73  set of registers
26d30 20 68 6f 6c 64 69 6e 67 20 50 41 52 54 49 54 49   holding PARTITI
26d40 4f 4e 20 42 59 0a 20 20 20 20 20 20 20 20 20 20  ON BY.          
26d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d60 2a 2a 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  ** and ORDER BY 
26d70 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 77  values for the w
26d80 69 6e 64 6f 77 20 2a 2f 0a 20 20 45 78 70 72 20  indow */.  Expr 
26d90 2a 70 4f 77 6e 65 72 3b 20 20 20 20 20 20 20 20  *pOwner;        
26da0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
26db0 20 6f 62 6a 65 63 74 20 74 68 69 73 20 77 69 6e   object this win
26dc0 64 6f 77 20 69 73 20 61 74 74 61 63 68 65 64 20  dow is attached 
26dd0 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66  to */.  int nBuf
26de0 66 65 72 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  ferCol;         
26df0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
26e00 75 6d 6e 73 20 69 6e 20 62 75 66 66 65 72 20 74  umns in buffer t
26e10 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41  able */.  int iA
26e20 72 67 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  rgCol;          
26e30 20 20 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20 66    /* Offset of f
26e40 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f  irst argument fo
26e50 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  r this function 
26e60 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66 20 53  */.};..#ifndef S
26e70 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
26e80 57 46 55 4e 43 0a 76 6f 69 64 20 73 71 6c 69 74  WFUNC.void sqlit
26e90 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 73  e3WindowDelete(s
26ea0 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64 6f 77 2a  qlite3*, Window*
26eb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
26ec0 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74 65 28  indowListDelete(
26ed0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
26ee0 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20  dow *p);.Window 
26ef0 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c  *sqlite3WindowAl
26f00 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  loc(Parse*, int,
26f10 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74   int, Expr*, int
26f20 20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20   , Expr*);.void 
26f30 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74  sqlite3WindowAtt
26f40 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
26f50 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74  *, Window*);.int
26f60 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f   sqlite3WindowCo
26f70 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 20 57 69  mpare(Parse*, Wi
26f80 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  ndow*, Window*);
26f90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
26fa0 64 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73  dowCodeInit(Pars
26fb0 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  e*, Window*);.vo
26fc0 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
26fd0 43 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c  CodeStep(Parse*,
26fe0 20 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49   Select*, WhereI
26ff0 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  nfo*, int, int);
27000 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64  .int sqlite3Wind
27010 6f 77 52 65 77 72 69 74 65 28 50 61 72 73 65 2a  owRewrite(Parse*
27020 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
27030 73 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62  sqlite3ExpandSub
27040 71 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74  query(Parse*, st
27050 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
27060 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
27070 33 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61  3WindowUpdate(Pa
27080 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57  rse*, Window*, W
27090 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a  indow*, FuncDef*
270a0 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
270b0 65 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69  e3WindowDup(sqli
270c0 74 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70  te3 *db, Expr *p
270d0 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70  Owner, Window *p
270e0 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
270f0 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28  e3WindowListDup(
27100 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
27110 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  dow *p);.void sq
27120 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74  lite3WindowFunct
27130 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 23 65 6c 73  ions(void);.#els
27140 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
27150 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61  e3WindowDelete(a
27160 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,b).# define sql
27170 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
27180 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73  ons().# define s
27190 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61  qlite3WindowAtta
271a0 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66  ch(a,b,c).#endif
271b0 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
271c0 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
271d0 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
271e0 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
271f0 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
27200 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
27210 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
27220 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
27230 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
27240 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
27250 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
27260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27270 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
27280 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
272b0 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
272c0 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
272d0 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
272e0 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
272f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27320 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
27330 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
27340 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
27350 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
27360 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
27370 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
27380 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
27390 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
273a0 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
273b0 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
273c0 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
273d0 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
273e0 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
273f0 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
27400 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
27410 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
27420 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
27430 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
27440 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
27450 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
27460 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f  .int sqlite3Repo
27470 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72  rtError(int iErr
27480 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f  , int lineno, co
27490 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29  nst char *zType)
274a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  ;.int sqlite3Cor
274b0 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
274c0 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
274d0 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
274e0 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
274f0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
27500 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
27510 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
27520 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
27530 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
27540 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
27550 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
27560 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
27570 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
27580 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
27590 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
275a0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66  __LINE__).#ifdef
275b0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
275c0 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  int sqlite3Nomem
275d0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
275e0 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  t sqlite3Ioerrno
275f0 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
27600 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72   int sqlite3Corr
27610 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74  uptPgnoError(int
27620 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65  ,Pgno);.# define
27630 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
27640 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  PT sqlite3NomemE
27650 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
27660 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
27670 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
27680 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
27690 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
276a0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
276b0 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29  _CORRUPT_PGNO(P)
276c0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50   sqlite3CorruptP
276d0 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  gnoError(__LINE_
276e0 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64  _,(P)).#else.# d
276f0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
27700 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e  EM_BKPT SQLITE_N
27710 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
27720 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
27730 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45  _BKPT SQLITE_IOE
27740 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e  RR_NOMEM.# defin
27750 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
27760 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33  _PGNO(P) sqlite3
27770 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
27780 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f  INE__).#endif../
27790 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54  *.** FTS3 and FT
277a0 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20  S4 both require 
277b0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
277c0 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66  pport.*/.#if def
277d0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
277e0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
277f0 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
27800 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65  ABLE_FTS3.# unde
27810 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
27820 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS4.#endif../*.
27830 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
27840 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
27850 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
27860 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
27870 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
27880 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
27890 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
278a0 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63  fusion we also c
278b0 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
278c0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
278d0 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
278e0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c  an alias for SQL
278f0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
27900 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
27910 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
27920 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
27930 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
27940 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
27950 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
27960 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
27970 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
27980 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
27990 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
279a0 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
279b0 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
279c0 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
279d0 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
279e0 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
279f0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
27a00 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
27a10 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
27a20 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
27a30 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
27a40 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
27a50 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
27a60 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
27a70 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
27a80 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
27a90 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
27aa0 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
27ab0 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
27ac0 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
27ad0 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
27ae0 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
27af0 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
27b00 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
27b10 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
27b20 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
27b30 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
27b40 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
27b50 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
27b60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
27b70 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
27b80 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
27b90 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
27ba0 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
27bb0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
27bc0 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
27bd0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
27be0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
27bf0 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
27c00 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
27c10 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
27c20 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
27c30 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
27c40 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
27c50 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
27c60 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
27c70 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
27c80 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
27c90 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
27ca0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
27cb0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
27cc0 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
27cd0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
27ce0 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
27cf0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
27d00 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
27d10 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
27d20 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
27d30 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
27d40 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
27d50 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66  char)(x)]).# def
27d60 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
27d70 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  te(x)   (sqlite3
27d80 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
27d90 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38  ed char)(x)]&0x8
27da0 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
27db0 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
27dc0 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75  (x)   toupper((u
27dd0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
27de0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27df0 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69  e3Isspace(x)   i
27e00 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
27e10 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
27e20 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
27e30 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28  um(x)   isalnum(
27e40 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27e50 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
27e60 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
27e70 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e   isalpha((unsign
27e80 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
27e90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
27ea0 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69  igit(x)   isdigi
27eb0 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
27ec0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
27ed0 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
27ee0 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73  )  isxdigit((uns
27ef0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
27f00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27f10 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c  Tolower(x)   tol
27f20 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  ower((unsigned c
27f30 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
27f40 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
27f50 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c  (x)   ((x)=='"'|
27f60 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d  |(x)=='\''||(x)=
27f70 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a  ='['||(x)=='`').
27f80 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
27f90 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
27fa0 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
27fb0 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
27fc0 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  pes.*/.int sqlit
27fd0 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20  e3StrICmp(const 
27fe0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
27ff0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
28000 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
28010 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
28020 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28  lite3Strlen30NN(
28030 43 29 20 28 73 74 72 6c 65 6e 28 43 29 26 30 78  C) (strlen(C)&0x
28040 33 66 66 66 66 66 66 66 29 0a 63 68 61 72 20 2a  3fffffff).char *
28050 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70  sqlite3ColumnTyp
28060 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29  e(Column*,char*)
28070 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
28080 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
28090 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
280a0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
280b0 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
280c0 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
280d0 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
280e0 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a  te3Malloc(u64);.
280f0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
28100 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f  locZero(u64);.vo
28110 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
28120 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
28130 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
28140 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
28150 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
28160 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
28170 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69  MallocRawNN(sqli
28180 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
28190 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
281a0 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
281b0 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
281c0 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
281d0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
281e0 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  har*, u64);.char
281f0 20 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44   *sqlite3DbSpanD
28200 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
28210 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
28220 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  ar*);.void *sqli
28230 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a  te3Realloc(void*
28240 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
28250 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
28260 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Free(sqlite3 *, 
28270 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
28280 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
28290 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  lloc(sqlite3 *, 
282a0 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
282b0 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
282c0 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
282d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
282e0 62 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a  bFreeNN(sqlite3*
282f0 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  , void*);.int sq
28300 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28  lite3MallocSize(
28310 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
28320 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28  te3DbMallocSize(
28330 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
28340 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
28350 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
28360 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
28370 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
28380 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
28390 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69  efault(void);.#i
283a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
283b0 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
283c0 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
283d0 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
283e0 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
283f0 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  oid));.#endif.in
28400 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
28410 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
28420 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
28430 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
28440 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
28450 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
28460 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
28470 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
28480 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
28490 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
284a0 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
284b0 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
284c0 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
284d0 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
284e0 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
284f0 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
28500 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
28510 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
28520 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
28530 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
28540 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
28550 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
28560 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
28570 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
28580 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
28590 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
285a0 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
285b0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
285c0 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
285d0 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
285e0 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
285f0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
28600 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20  ee(D,P).#else.# 
28610 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
28620 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
28630 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
28640 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
28650 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
28660 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
28670 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
28680 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
28690 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
286a0 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
286b0 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
286c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e  .#endif../* Do n
286d0 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45  ot allow both ME
286e0 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53  MSYS5 and MEMSYS
286f0 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20  3 to be defined 
28700 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68  together.  If th
28710 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62  ey.** are, disab
28720 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69  le MEMSYS3.*/.#i
28730 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
28740 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
28750 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
28760 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
28770 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
28780 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  ;.#undef SQLITE_
28790 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23  ENABLE_MEMSYS3.#
287a0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
287b0 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
287c0 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S3.const sqlite3
287d0 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
287e0 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
287f0 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s3(void);.#endif
28800 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
28810 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
28820 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
28830 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
28840 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
28850 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
28860 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
28870 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
28880 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
28890 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
288a0 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
288b0 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
288c0 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
288d0 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
288e0 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
288f0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ;.#endif.#if !de
28900 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
28910 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66  EX_OMIT) && !def
28920 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
28930 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73  X_NOOP).  void s
28940 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
28950 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  ier(void);.#else
28960 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28970 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29  3MemoryBarrier()
28980 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33  .#endif..sqlite3
28990 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
289a0 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
289b0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
289c0 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  usUp(int, int);.
289d0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
289e0 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29  usDown(int, int)
289f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
28a00 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e  atusHighwater(in
28a10 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
28a20 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65  ite3LookasideUse
28a30 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29  d(sqlite3*,int*)
28a40 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20  ;../* Access to 
28a50 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20  mutexes used by 
28a60 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29  sqlite3_status()
28a70 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65   */.sqlite3_mute
28a80 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65  x *sqlite3Pcache
28a90 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71  1Mutex(void);.sq
28aa0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
28ab0 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28  ite3MallocMutex(
28ac0 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69  void);..#if defi
28ad0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
28ae0 45 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f  E_MULTITHREADED_
28af0 43 48 45 43 4b 53 29 20 26 26 20 21 64 65 66 69  CHECKS) && !defi
28b00 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
28b10 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69  _OMIT).void sqli
28b20 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f  te3MutexWarnOnCo
28b30 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33  ntention(sqlite3
28b40 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a  _mutex*);.#else.
28b50 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28b60 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65  MutexWarnOnConte
28b70 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a  ntion(x).#endif.
28b80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28b90 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
28ba0 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  INT.  int sqlite
28bb0 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
28bc0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
28bd0 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20  qlite3IsNaN(X)  
28be0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
28bf0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
28c00 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
28c10 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66  ucture holds inf
28c20 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53  ormation about S
28c30 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  QL.** functions 
28c40 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61  arguments that a
28c50 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  re the parameter
28c60 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28  s to the printf(
28c70 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  ) function..*/.s
28c80 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
28c90 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41  ments {.  int nA
28ca0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
28cb0 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62     /* Total numb
28cc0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
28cd0 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20  */.  int nUsed; 
28ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
28cf0 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
28d00 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  ents used so far
28d10 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61   */.  sqlite3_va
28d20 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f  lue **apArg;   /
28d30 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76  * The argument v
28d40 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61  alues */.};..cha
28d50 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
28d60 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
28d70 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
28d80 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69  ar *sqlite3VMPri
28d90 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
28da0 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
28db0 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
28dc0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
28dd0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28de0 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20  HAVE_OS_TRACE). 
28df0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62   void sqlite3Deb
28e00 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  ugPrintf(const c
28e10 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64  har*, ...);.#end
28e20 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
28e30 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f  QLITE_TEST).  vo
28e40 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54  id *sqlite3TestT
28e50 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63  extToPtr(const c
28e60 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
28e70 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
28e80 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20  E_DEBUG).  void 
28e90 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
28ea0 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63  xpr(TreeView*, c
28eb0 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b  onst Expr*, u8);
28ec0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
28ed0 72 65 65 56 69 65 77 42 61 72 65 45 78 70 72 4c  reeViewBareExprL
28ee0 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
28ef0 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
28f00 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
28f10 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
28f20 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65  ViewExprList(Tre
28f30 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
28f40 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e  prList*, u8, con
28f50 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
28f60 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
28f70 77 53 72 63 4c 69 73 74 28 54 72 65 65 56 69 65  wSrcList(TreeVie
28f80 77 2a 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69 73  w*, const SrcLis
28f90 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
28fa0 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63  te3TreeViewSelec
28fb0 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
28fc0 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b  st Select*, u8);
28fd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
28fe0 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65 65  reeViewWith(Tree
28ff0 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74  View*, const Wit
29000 68 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  h*, u8);.#ifndef
29010 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e   SQLITE_OMIT_WIN
29020 44 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64 20 73  DOWFUNC.  void s
29030 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69  qlite3TreeViewWi
29040 6e 64 6f 77 28 54 72 65 65 56 69 65 77 2a 2c 20  ndow(TreeView*, 
29050 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75  const Window*, u
29060 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
29070 65 33 54 72 65 65 56 69 65 77 57 69 6e 46 75 6e  e3TreeViewWinFun
29080 63 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  c(TreeView*, con
29090 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b  st Window*, u8);
290a0 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  .#endif.#endif..
290b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74  .void sqlite3Set
290c0 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20  String(char **, 
290d0 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
290e0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
290f0 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72  ite3ErrorMsg(Par
29100 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
29110 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
29120 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72  ite3Dequote(char
29130 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29140 44 65 71 75 6f 74 65 45 78 70 72 28 45 78 70 72  DequoteExpr(Expr
29150 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29160 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a  TokenInit(Token*
29170 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,char*);.int sql
29180 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
29190 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
291a0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
291b0 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
291c0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
291d0 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
291e0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
291f0 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
29200 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
29210 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
29220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
29230 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
29240 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
29250 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
29260 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
29270 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
29280 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
29290 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
292a0 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
292b0 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
292c0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
292d0 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
292e0 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65  e3NoTempsInRange
292f0 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
29300 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73  ;.#endif.Expr *s
29310 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28  qlite3ExprAlloc(
29320 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
29330 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  st Token*,int);.
29340 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
29350 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
29360 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
29370 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74  d sqlite3ExprAtt
29380 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69  achSubtrees(sqli
29390 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  te3*,Expr*,Expr*
293a0 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  ,Expr*);.Expr *s
293b0 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73  qlite3PExpr(Pars
293c0 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  e*, int, Expr*, 
293d0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
293e0 69 74 65 33 50 45 78 70 72 41 64 64 53 65 6c 65  ite3PExprAddSele
293f0 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ct(Parse*, Expr*
29400 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72  , Select*);.Expr
29410 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64   *sqlite3ExprAnd
29420 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
29430 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73   Expr*);.Expr *s
29440 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69  qlite3ExprFuncti
29450 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  on(Parse*,ExprLi
29460 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  st*, Token*, int
29470 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29480 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
29490 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
294a0 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
294b0 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
294c0 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
294d0 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
294e0 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
294f0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
29500 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  *,Expr*);.ExprLi
29510 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
29520 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28  istAppendVector(
29530 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
29540 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  ,IdList*,Expr*);
29550 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
29560 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65  rListSetSortOrde
29570 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  r(ExprList*,int)
29580 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29590 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
295a0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
295b0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
295c0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
295d0 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
295e0 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  xprList*,const c
295f0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
29600 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29610 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71  xprListDelete(sq
29620 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74  lite3*, ExprList
29630 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45  *);.u32 sqlite3E
29640 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e  xprListFlags(con
29650 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  st ExprList*);.i
29660 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 48  nt sqlite3IndexH
29670 61 73 44 75 70 6c 69 63 61 74 65 52 6f 6f 74 50  asDuplicateRootP
29680 61 67 65 28 49 6e 64 65 78 2a 29 3b 0a 69 6e 74  age(Index*);.int
29690 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
296a0 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
296b0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
296c0 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
296d0 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
296e0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
296f0 49 6e 69 74 4f 6e 65 28 73 71 6c 69 74 65 33 2a  InitOne(sqlite3*
29700 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 75  , int, char**, u
29710 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
29720 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
29730 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
29740 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65  en*,int);.#ifnde
29750 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
29760 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c  RTUALTABLE.Modul
29770 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67 6d 61  e *sqlite3Pragma
29780 56 74 61 62 52 65 67 69 73 74 65 72 28 73 71 6c  VtabRegister(sql
29790 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
297a0 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66   *zName);.#endif
297b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
297c0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
297d0 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
297e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
297f0 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
29800 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
29810 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
29820 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
29830 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
29840 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74  sqlite3CommitInt
29850 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c  ernalChanges(sql
29860 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
29870 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e  ite3DeleteColumn
29880 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54  Names(sqlite3*,T
29890 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
298a0 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78  te3ColumnsFromEx
298b0 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78  prList(Parse*,Ex
298c0 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c  prList*,i16*,Col
298d0 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  umn**);.void sql
298e0 69 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c  ite3SelectAddCol
298f0 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74  umnTypeAndCollat
29900 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
29910 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  *,Select*);.Tabl
29920 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
29930 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
29940 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69  e*,Select*);.voi
29950 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
29960 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
29970 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73  , int);.Index *s
29980 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
29990 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69  Index(Table*);.i
299a0 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  16 sqlite3Column
299b0 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20  OfIndex(Index*, 
299c0 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  i16);.void sqlit
299d0 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
299e0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
299f0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
29a00 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  t);.#if SQLITE_E
29a10 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
29a20 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69  UMNS.  void sqli
29a30 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74  te3ColumnPropert
29a40 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c  iesFromName(Tabl
29a50 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65  e*, Column*);.#e
29a60 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
29a70 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
29a80 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43  tiesFromName(T,C
29a90 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65  ) /* no-op */.#e
29aa0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
29ab0 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
29ac0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29  *,Token*,Token*)
29ad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
29ae0 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
29af0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
29b00 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
29b10 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
29b20 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
29b30 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29b40 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
29b50 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
29b60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
29b70 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
29b80 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73  arse*,Expr*,cons
29b90 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
29ba0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
29bb0 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
29bc0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
29bd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
29be0 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
29bf0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
29c00 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
29c10 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
29c20 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
29c30 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
29c40 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
29c50 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
29c60 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
29c70 72 20 2a 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  r **);.#ifdef SQ
29c80 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
29c90 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65   int sqlite3Code
29ca0 63 51 75 65 72 79 50 61 72 61 6d 65 74 65 72 73  cQueryParameters
29cb0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
29cc0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
29cd0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
29ce0 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 63 51  ne sqlite3CodecQ
29cf0 75 65 72 79 50 61 72 61 6d 65 74 65 72 73 28 41  ueryParameters(A
29d00 2c 42 2c 43 29 20 30 0a 23 65 6e 64 69 66 0a 42  ,B,C) 0.#endif.B
29d10 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
29d20 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
29d30 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
29d40 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
29d50 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65  _UNTESTABLE.# de
29d60 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c  fine sqlite3Faul
29d70 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f  tSim(X) SQLITE_O
29d80 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71  K.#else.  int sq
29d90 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e  lite3FaultSim(in
29da0 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76  t);.#endif..Bitv
29db0 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
29dc0 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
29dd0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
29de0 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
29df0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
29e00 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28  tvecTestNotNull(
29e10 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
29e20 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
29e30 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
29e40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
29e50 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
29e60 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
29e70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
29e80 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
29e90 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
29ea0 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
29eb0 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  c*);.#ifndef SQL
29ec0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69  ITE_UNTESTABLE.i
29ed0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
29ee0 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c  BuiltinTest(int,
29ef0 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52  int*);.#endif..R
29f00 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
29f10 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
29f20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29f30 52 6f 77 53 65 74 44 65 6c 65 74 65 28 76 6f 69  RowSetDelete(voi
29f40 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
29f50 33 52 6f 77 53 65 74 43 6c 65 61 72 28 76 6f 69  3RowSetClear(voi
29f60 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
29f70 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f  3RowSetInsert(Ro
29f80 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74  wSet*, i64);.int
29f90 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
29fa0 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20  st(RowSet*, int 
29fb0 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e  iBatch, i64);.in
29fc0 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  t sqlite3RowSetN
29fd0 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ext(RowSet*, i64
29fe0 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
29ff0 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73  3CreateView(Pars
2a000 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
2a010 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2a020 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
2a030 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
2a040 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
2a050 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
2a060 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2a070 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
2a080 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
2a090 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
2a0a0 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
2a0b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2a0c0 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
2a0d0 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
2a0e0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
2a0f0 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69  _ATTACHED>30.  i
2a100 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b  nt sqlite3DbMask
2a110 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29  AllZero(yDbMask)
2a120 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2a130 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50  lite3DropTable(P
2a140 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2a150 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2a160 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70   sqlite3CodeDrop
2a170 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61  Table(Parse*, Ta
2a180 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
2a190 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
2a1a0 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
2a1b0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  *, Table*);.void
2a1c0 20 73 71 6c 69 74 65 33 46 72 65 65 49 6e 64 65   sqlite3FreeInde
2a1d0 78 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65  x(sqlite3*, Inde
2a1e0 78 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  x*);.#ifndef SQL
2a1f0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2a200 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71  REMENT.  void sq
2a210 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
2a220 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70  ntBegin(Parse *p
2a230 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73  Parse);.  void s
2a240 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
2a250 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50  entEnd(Parse *pP
2a260 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  arse);.#else.# d
2a270 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2a280 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
2a290 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
2a2a0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
2a2b0 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f  End(X).#endif.vo
2a2c0 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
2a2d0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2a2e0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69  *, Select*, IdLi
2a2f0 73 74 2a 2c 20 69 6e 74 2c 20 55 70 73 65 72 74  st*, int, Upsert
2a300 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
2a310 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
2a320 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
2a330 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
2a340 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
2a350 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
2a360 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
2a370 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2a380 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73  dListIndex(IdLis
2a390 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
2a3a0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
2a3b0 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28  3SrcListEnlarge(
2a3c0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2a3d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63  , int, int);.Src
2a3e0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
2a3f0 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
2a400 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
2a410 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
2a420 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
2a430 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
2a440 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
2a450 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
2a460 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
2a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a480 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
2a490 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  n*, Select*, Exp
2a4a0 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
2a4b0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
2a4c0 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65  tIndexedBy(Parse
2a4d0 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54   *, SrcList *, T
2a4e0 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
2a4f0 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63  lite3SrcListFunc
2a500 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63  Args(Parse*, Src
2a510 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
2a520 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2a530 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61  dexedByLookup(Pa
2a540 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72  rse *, struct Sr
2a550 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76  cList_item *);.v
2a560 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
2a570 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
2a580 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
2a590 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
2a5a0 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
2a5b0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
2a5c0 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
2a5d0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
2a5e0 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
2a5f0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44   sqlite3SrcListD
2a600 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
2a610 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78  SrcList*);.Index
2a620 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74   *sqlite3Allocat
2a630 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c  eIndexObject(sql
2a640 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68  ite3*,i16,int,ch
2a650 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
2a660 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
2a670 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
2a680 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
2a690 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
2a6a0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
2a6c0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  r*, int, int, u8
2a6d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2a6e0 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ropIndex(Parse*,
2a6f0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
2a700 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
2a710 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ct(Parse*, Selec
2a720 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
2a730 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
2a740 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65  3SelectNew(Parse
2a750 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c  *,ExprList*,SrcL
2a760 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
2a770 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
2a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
2a790 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  xpr*,ExprList*,u
2a7a0 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  32,Expr*);.void 
2a7b0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
2a7c0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
2a7d0 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
2a7e0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
2a7f0 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
2a800 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2a810 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
2a820 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2a830 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2a840 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
2a850 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
2a860 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
2a870 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
2a880 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
2a890 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
2a8a0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2a8b0 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
2a8c0 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
2a8d0 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
2a8e0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
2a8f0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
2a900 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
2a910 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2a920 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
2a930 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  rcList*, Expr*, 
2a940 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
2a950 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
2a960 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
2a970 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
2a980 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72  *,Expr*,int,Expr
2a990 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20  List*,Expr*,.   
2a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9b0 55 70 73 65 72 74 2a 29 3b 0a 57 68 65 72 65 49  Upsert*);.WhereI
2a9c0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
2a9d0 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72  eBegin(Parse*,Sr
2a9e0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
2a9f0 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  rList*,ExprList*
2aa00 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,u16,int);.void 
2aa10 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
2aa20 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67  WhereInfo*);.Log
2aa30 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  Est sqlite3Where
2aa40 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57  OutputRowCount(W
2aa50 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2aa60 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
2aa70 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f  stinct(WhereInfo
2aa80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2aa90 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68  hereIsOrdered(Wh
2aaa0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2aab0 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65 72  qlite3WhereOrder
2aac0 42 79 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28  ByLimitOptLabel(
2aad0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2aae0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53   sqlite3WhereIsS
2aaf0 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  orted(WhereInfo*
2ab00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2ab10 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c  ereContinueLabel
2ab20 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2ab30 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72  t sqlite3WhereBr
2ab40 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  eakLabel(WhereIn
2ab50 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2ab60 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28  3WhereOkOnePass(
2ab70 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a  WhereInfo*, int*
2ab80 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  );.#define ONEPA
2ab90 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20  SS_OFF      0   
2aba0 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f       /* Use of O
2abb0 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77  NEPASS not allow
2abc0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  ed */.#define ON
2abd0 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31  EPASS_SINGLE   1
2abe0 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
2abf0 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73  SS valid for a s
2ac00 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65  ingle row update
2ac10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50   */.#define ONEP
2ac20 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20  ASS_MULTI    2  
2ac30 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53        /* ONEPASS
2ac40 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75   is valid for mu
2ac50 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76  ltiple rows */.v
2ac60 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
2ac70 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75  odeLoadIndexColu
2ac80 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  mn(Parse*, Index
2ac90 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2aca0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2acb0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28  prCodeGetColumn(
2acc0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2acd0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  int, int, int, u
2ace0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2acf0 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
2ad00 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
2ad10 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2ad20 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2ad30 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
2ad40 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
2ad50 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2ad60 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
2ad70 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2ad80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2ad90 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73  xprCodeCopy(Pars
2ada0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2adb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2adc0 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28  rCodeFactorable(
2add0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2ade0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2adf0 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50  ExprCodeAtInit(P
2ae00 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2ae10 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2ae20 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
2ae30 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
2ae40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2ae50 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
2ae60 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2ae70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2ae80 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
2ae90 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2aea0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2aeb0 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
2aec0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2aed0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
2aee0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2aef0 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78  ECEL_DUP      0x
2af00 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74  01  /* Deep, not
2af10 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20   shallow copies 
2af20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2af30 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20  E_ECEL_FACTOR   
2af40 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20  0x02  /* Factor 
2af50 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72  out constant ter
2af60 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
2af70 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20  LITE_ECEL_REF   
2af80 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20     0x04  /* Use 
2af90 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72  ExprList.u.x.iOr
2afa0 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66  derByCol */.#def
2afb0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
2afc0 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f  OMITREF  0x08  /
2afd0 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69  * Omit if ExprLi
2afe0 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43  st.u.x.iOrderByC
2aff0 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ol */.void sqlit
2b000 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72  e3ExprIfTrue(Par
2b010 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
2b020 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2b030 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50  te3ExprIfFalse(P
2b040 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2b050 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2b060 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
2b070 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Dup(Parse*, Expr
2b080 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
2b090 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
2b0a0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
2b0b0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2b0c0 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
2b0d0 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20  e LOCATE_VIEW   
2b0e0 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f   0x01.#define LO
2b0f0 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30  CATE_NOERR   0x0
2b100 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  2.Table *sqlite3
2b110 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73  LocateTable(Pars
2b120 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e  e*,u32 flags,con
2b130 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2b140 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
2b150 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
2b160 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32  eItem(Parse*,u32
2b170 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72   flags,struct Sr
2b180 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
2b190 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
2b1a0 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
2b1b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2b1c0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2b1d0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2b1e0 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
2b1f0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
2b200 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2b210 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2b220 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
2b230 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
2b240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2b250 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b  acuum(Parse*,Tok
2b260 65 6e 2a 2c 45 78 70 72 2a 29 3b 0a 69 6e 74 20  en*,Expr*);.int 
2b270 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
2b280 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33  (char**, sqlite3
2b290 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  *, int, sqlite3_
2b2a0 76 61 6c 75 65 2a 29 3b 0a 63 68 61 72 20 2a 73  value*);.char *s
2b2b0 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
2b2c0 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  ken(sqlite3*, To
2b2d0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2b2e0 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50 61  e3ExprCompare(Pa
2b2f0 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  rse*,Expr*, Expr
2b300 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2b310 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53  ite3ExprCompareS
2b320 6b 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  kip(Expr*, Expr*
2b330 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2b340 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61  te3ExprListCompa
2b350 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  re(ExprList*, Ex
2b360 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  prList*, int);.i
2b370 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d  nt sqlite3ExprIm
2b380 70 6c 69 65 73 45 78 70 72 28 50 61 72 73 65 2a  pliesExpr(Parse*
2b390 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  ,Expr*, Expr*, i
2b3a0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2b3b0 45 78 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75  ExprImpliesNonNu
2b3c0 6c 6c 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29  llRow(Expr*,int)
2b3d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2b3e0 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
2b3f0 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
2b400 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2b410 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
2b420 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
2b430 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
2b440 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b450 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28  rCoveredByIndex(
2b460 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c  Expr*, int iCur,
2b470 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69   Index *pIdx);.i
2b480 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69  nt sqlite3Functi
2b490 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78  onUsesThisSrc(Ex
2b4a0 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  pr*, SrcList*);.
2b4b0 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74  Vdbe *sqlite3Get
2b4c0 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  Vdbe(Parse*);.#i
2b4d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
2b4e0 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
2b4f0 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74  ite3PrngSaveStat
2b500 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
2b510 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65  lite3PrngRestore
2b520 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e  State(void);.#en
2b530 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2b540 46 61 73 74 50 72 6e 67 49 6e 69 74 28 46 61 73  FastPrngInit(Fas
2b550 74 50 72 6e 67 2a 29 3b 0a 76 6f 69 64 20 73 71  tPrng*);.void sq
2b560 6c 69 74 65 33 46 61 73 74 52 61 6e 64 6f 6d 6e  lite3FastRandomn
2b570 65 73 73 28 46 61 73 74 50 72 6e 67 2a 2c 20 69  ess(FastPrng*, i
2b580 6e 74 20 4e 2c 20 76 6f 69 64 20 2a 50 29 3b 0a  nt N, void *P);.
2b590 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
2b5a0 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a  backAll(sqlite3*
2b5b0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2b5c0 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
2b5d0 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ema(Parse*, int)
2b5e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
2b5f0 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68  deVerifyNamedSch
2b600 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ema(Parse*, cons
2b610 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f  t char *zDb);.vo
2b620 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
2b630 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
2b640 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2b650 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61 63 74  lite3EndTransact
2b660 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  ion(Parse*,int);
2b670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76  .void sqlite3Sav
2b680 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  epoint(Parse*, i
2b690 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  nt, Token*);.voi
2b6a0 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61  d sqlite3CloseSa
2b6b0 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33  vepoints(sqlite3
2b6c0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2b6d0 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c  3LeaveMutexAndCl
2b6e0 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65  oseZombie(sqlite
2b6f0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2b700 45 78 70 72 49 64 54 6f 54 72 75 65 46 61 6c 73  ExprIdToTrueFals
2b710 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
2b720 6c 69 74 65 33 45 78 70 72 54 72 75 74 68 56 61  lite3ExprTruthVa
2b730 6c 75 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  lue(const Expr*)
2b740 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b750 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  rIsConstant(Expr
2b760 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2b770 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74  xprIsConstantNot
2b780 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  Join(Expr*);.int
2b790 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
2b7a0 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
2b7b0 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74  (Expr*, u8);.int
2b7c0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
2b7d0 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28  nstantOrGroupBy(
2b7e0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
2b7f0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2b800 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c  qlite3ExprIsTabl
2b810 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c  eConstant(Expr*,
2b820 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
2b830 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
2b840 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69  R_HINTS.int sqli
2b850 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53  te3ExprContainsS
2b860 75 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a  ubquery(Expr*);.
2b870 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2b880 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28  e3ExprIsInteger(
2b890 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
2b8a0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e  t sqlite3ExprCan
2b8b0 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70  BeNull(const Exp
2b8c0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2b8d0 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e  ExprNeedsNoAffin
2b8e0 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20  ityChange(const 
2b8f0 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e  Expr*, char);.in
2b900 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64  t sqlite3IsRowid
2b910 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
2b920 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
2b930 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20  ateRowDelete(.  
2b940 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c    Parse*,Table*,
2b950 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74  Trigger*,int,int
2b960 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75  ,int,i16,u8,u8,u
2b970 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  8,int);.void sql
2b980 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49  ite3GenerateRowI
2b990 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65  ndexDelete(Parse
2b9a0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2b9b0 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
2b9c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
2b9d0 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
2b9e0 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
2b9f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
2ba00 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Index*,int);.vo
2ba10 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
2ba20 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61  ePartIdxLabel(Pa
2ba30 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
2ba40 71 6c 69 74 65 33 45 78 70 72 52 65 66 65 72 65  qlite3ExprRefere
2ba50 6e 63 65 73 55 70 64 61 74 65 64 43 6f 6c 75 6d  ncesUpdatedColum
2ba60 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e 74  n(Expr*,int*,int
2ba70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
2ba80 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
2ba90 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
2baa0 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69  able*,int*,int,i
2bab0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  nt,int,int,.    
2bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bae0 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c   u8,u8,int,int*,
2baf0 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 23  int*,Upsert*);.#
2bb00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2bb10 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20  BLE_NULL_TRIM.  
2bb20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d  void sqlite3SetM
2bb30 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62 65  akeRecordP5(Vdbe
2bb40 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
2bb50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2bb60 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35  3SetMakeRecordP5
2bb70 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69  (A,B).#endif.voi
2bb80 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
2bb90 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
2bba0 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
2bbb0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
2bbc0 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
2bbd0 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
2bbe0 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
2bbf0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20  able*, int, u8, 
2bc00 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
2bc10 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
2bc20 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
2bc30 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
2bc40 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2bc50 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
2bc60 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
2bc70 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
2bc80 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2bc90 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
2bca0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
2bcb0 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
2bcc0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2bcd0 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
2bce0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
2bcf0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2bd00 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
2bd10 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2bd20 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
2bd30 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
2bd40 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
2bd50 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
2bd60 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
2bd70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
2bd80 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
2bd90 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
2bda0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
2bdb0 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
2bdc0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
2bdd0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
2bde0 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
2bdf0 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
2be00 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
2be10 74 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66  t*,int);.FuncDef
2be20 20 2a 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f   *sqlite3Functio
2be30 6e 53 65 61 72 63 68 28 69 6e 74 2c 63 6f 6e 73  nSearch(int,cons
2be40 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2be50 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c  qlite3InsertBuil
2be60 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66  tinFuncs(FuncDef
2be70 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20  *,int);.FuncDef 
2be80 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63  *sqlite3FindFunc
2be90 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tion(sqlite3*,co
2bea0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38  nst char*,int,u8
2beb0 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
2bec0 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69  e3RegisterBuilti
2bed0 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  nFunctions(void)
2bee0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2bef0 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
2bf00 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
2bf10 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2bf20 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e  terPerConnection
2bf30 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
2bf40 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2bf50 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
2bf60 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ckOk(sqlite3*);.
2bf70 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
2bf80 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73  yCheckSickOrOk(s
2bf90 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
2bfa0 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b  qlite3ChangeCook
2bfb0 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ie(Parse*, int);
2bfc0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2bfd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
2bfe0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2bff0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2c000 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ).void sqlite3Ma
2c010 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61  terializeView(Pa
2c020 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
2c030 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45  pr*, ExprList*,E
2c040 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69  xpr*,int);.#endi
2c050 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2c060 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
2c070 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
2c080 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  inTrigger(Parse*
2c090 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  , Token*,Token*,
2c0a0 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
2c0b0 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  SrcList*,.      
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0d0 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20       Expr*,int, 
2c0e0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
2c0f0 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
2c100 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
2c110 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
2c120 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2c130 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
2c140 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
2c150 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2c160 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
2c170 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
2c180 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
2c190 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
2c1a0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
2c1b0 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  e*, int, ExprLis
2c1c0 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b  t*, int *pMask);
2c1d0 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
2c1e0 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50  te3TriggerList(P
2c1f0 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  arse *, Table *)
2c200 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c210 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
2c220 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a  arse*, Trigger *
2c230 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
2c240 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a  , int, Table *,.
2c250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c260 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
2c270 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
2c280 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
2c290 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50  wTriggerDirect(P
2c2a0 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20  arse *, Trigger 
2c2b0 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
2c2c0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
2c2d0 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
2c2e0 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
2c2f0 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
2c300 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
2c310 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2c320 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71  teTriggerStep(sq
2c330 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53  lite3*, TriggerS
2c340 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  tep*);.  Trigger
2c350 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
2c360 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73  ggerSelectStep(s
2c370 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
2c380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3a0 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2c3b0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
2c3c0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
2c3d0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
2c3e0 49 6e 73 65 72 74 53 74 65 70 28 50 61 72 73 65  InsertStep(Parse
2c3f0 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
2c400 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c420 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63             Selec
2c430 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20  t*,u8,Upsert*,. 
2c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c460 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2c470 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2c480 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
2c490 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
2c4a0 64 61 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c  dateStep(Parse*,
2c4b0 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
2c4c0 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20  , Expr*, u8,.   
2c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4f0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2c500 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2c510 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
2c520 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
2c530 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f  teStep(Parse*,To
2c540 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20  ken*, Expr*,.   
2c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c570 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2c580 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2c590 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
2c5a0 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
2c5b0 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  e3*, Trigger*);.
2c5c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e    void sqlite3Un
2c5d0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
2c5e0 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  gger(sqlite3*,in
2c5f0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
2c600 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69    u32 sqlite3Tri
2c610 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73  ggerColmask(Pars
2c620 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72  e*,Trigger*,Expr
2c630 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61  List*,int,int,Ta
2c640 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66  ble*,int);.# def
2c650 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
2c660 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29  Toplevel(p) ((p)
2c670 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70  ->pToplevel ? (p
2c680 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28  )->pToplevel : (
2c690 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  p)).# define sql
2c6a0 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70  ite3IsToplevel(p
2c6b0 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
2c6c0 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  l==0).#else.# de
2c6d0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
2c6e0 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
2c6f0 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
2c700 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
2c710 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
2c720 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
2c730 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
2c740 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
2c750 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
2c760 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
2c770 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
2c780 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
2c790 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
2c7a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2c7b0 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
2c7c0 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
2c7d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2c7e0 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
2c7f0 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
2c800 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
2c810 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
2c820 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65  sqlite3IsTopleve
2c830 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20  l(p) 1.# define 
2c840 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
2c850 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
2c860 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
2c870 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
2c880 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
2c890 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2c8a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c8b0 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
2c8c0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2c8d0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
2c8e0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
2c8f0 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
2c900 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
2c910 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
2c920 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
2c930 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
2c940 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
2c950 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
2c960 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
2c970 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
2c980 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
2c990 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
2c9a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2c9b0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
2c9c0 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
2c9d0 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
2c9e0 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
2c9f0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
2ca00 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
2ca10 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
2ca20 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
2ca30 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
2ca40 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
2ca50 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
2ca60 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
2ca70 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2ca80 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
2ca90 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
2caa0 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
2cab0 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
2cac0 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
2cad0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
2cae0 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
2caf0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
2cb00 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
2cb10 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
2cb20 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
2cb30 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
2cb40 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
2cb50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2cb60 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
2cb70 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2cb80 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
2cb90 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
2cba0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2cbb0 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
2cbc0 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
2cbd0 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
2cbe0 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
2cbf0 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
2cc00 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
2cc10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2cc20 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
2cc30 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2cc40 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
2cc50 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
2cc60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2cc70 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
2cc80 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
2cc90 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
2cca0 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
2ccb0 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
2ccc0 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
2ccd0 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
2cce0 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
2ccf0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2cd00 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
2cd10 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2cd20 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71  MIT_UTF16.int sq
2cd30 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65  lite3Utf16ByteLe
2cd40 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44  n(const void *pD
2cd50 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b  ata, int nChar);
2cd60 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2cd70 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
2cd80 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
2cd90 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
2cda0 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
2cdb0 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
2cdc0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
2cdd0 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
2cde0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
2cdf0 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
2ce00 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2ce10 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ce20 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
2ce30 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
2ce40 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
2ce50 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
2ce60 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
2ce70 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20  _SCANSTATUS) || 
2ce80 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
2ce90 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
2cea0 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c  3_OR_STAT4) || \
2ceb0 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
2cec0 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49  ITE_EXPLAIN_ESTI
2ced0 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20  MATED_ROWS).u64 
2cee0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
2cef0 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64  nt(LogEst);.#end
2cf00 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65  if.VList *sqlite
2cf10 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65  3VListAdd(sqlite
2cf20 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  3*,VList*,const 
2cf30 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  char*,int,int);.
2cf40 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2cf50 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d  te3VListNumToNam
2cf60 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69  e(VList*,int);.i
2cf70 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  nt sqlite3VListN
2cf80 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c  ameToNum(VList*,
2cf90 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2cfa0 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
2cfb0 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
2cfc0 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
2cfd0 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
2cfe0 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
2cff0 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
2d000 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
2d010 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
2d020 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
2d030 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
2d040 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
2d050 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
2d060 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
2d070 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
2d080 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2d090 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
2d0a0 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
2d0b0 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
2d0c0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
2d0d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2d0e0 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
2d0f0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
2d100 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
2d110 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
2d120 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
2d130 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
2d140 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
2d150 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
2d160 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
2d170 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
2d180 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
2d190 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
2d1a0 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
2d1b0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
2d1c0 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
2d1d0 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
2d1e0 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
2d1f0 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
2d200 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
2d210 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
2d220 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
2d230 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
2d240 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
2d250 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
2d260 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
2d270 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
2d280 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
2d290 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
2d2a0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2d2b0 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
2d2c0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
2d2d0 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
2d2e0 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
2d2f0 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c  xAffinityStr(sql
2d300 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  ite3*, Index*);.
2d310 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
2d320 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c  eAffinity(Vdbe*,
2d330 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63   Table*, int);.c
2d340 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
2d350 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
2d360 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
2d370 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
2d380 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
2d390 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
2d3a0 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
2d3b0 63 68 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c  char sqlite3Tabl
2d3c0 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  eColumnAffinity(
2d3d0 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61  Table*,int);.cha
2d3e0 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66  r sqlite3ExprAff
2d3f0 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
2d400 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  r);.int sqlite3A
2d410 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
2d420 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38  *, i64*, int, u8
2d430 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
2d440 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73  cOrHexToI64(cons
2d450 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a  t char*, i64*);.
2d460 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
2d470 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33  rWithMsg(sqlite3
2d480 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
2d490 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  ar*,...);.void s
2d4a0 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
2d4b0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
2d4c0 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72  sqlite3SystemErr
2d4d0 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
2d4e0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ;.void *sqlite3H
2d4f0 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33  exToBlob(sqlite3
2d500 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
2d510 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c  , int n);.u8 sql
2d520 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74  ite3HexToInt(int
2d530 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   h);.int sqlite3
2d540 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73  TwoPartName(Pars
2d550 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  e *, Token *, To
2d560 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29  ken *, Token **)
2d570 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
2d580 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
2d590 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20  AME).const char 
2d5a0 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28  *sqlite3ErrName(
2d5b0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
2d5c0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2d5d0 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69  LE_DESERIALIZE.i
2d5e0 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49  nt sqlite3MemdbI
2d5f0 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  nit(void);.#endi
2d600 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
2d610 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
2d620 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2d630 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
2d640 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
2d650 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
2d660 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
2d670 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
2d680 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
2d690 74 65 33 49 73 42 69 6e 61 72 79 28 63 6f 6e 73  te3IsBinary(cons
2d6a0 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c  t CollSeq*);.Col
2d6b0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63  lSeq *sqlite3Loc
2d6c0 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  ateCollSeq(Parse
2d6d0 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20   *pParse, const 
2d6e0 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c  char*zName);.Col
2d6f0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70  lSeq *sqlite3Exp
2d700 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  rCollSeq(Parse *
2d710 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45  pParse, Expr *pE
2d720 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  xpr);.CollSeq *s
2d730 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c  qlite3ExprNNColl
2d740 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
2d750 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
2d760 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2d770 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72  CollSeqMatch(Par
2d780 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  se*,Expr*,Expr*)
2d790 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2d7a0 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b  xprAddCollateTok
2d7b0 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  en(Parse *pParse
2d7c0 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
2d7d0 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70  oken*, int);.Exp
2d7e0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
2d7f0 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50  dCollateString(P
2d800 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73  arse*,Expr*,cons
2d810 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a  t char*);.Expr *
2d820 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43  sqlite3ExprSkipC
2d830 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69  ollate(Expr*);.i
2d840 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43  nt sqlite3CheckC
2d850 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
2d860 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20  CollSeq *);.int 
2d870 73 71 6c 69 74 65 33 57 72 69 74 61 62 6c 65 53  sqlite3WritableS
2d880 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 29 3b  chema(sqlite3*);
2d890 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
2d8a0 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73  kObjectName(Pars
2d8b0 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e *, const char 
2d8c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d8d0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73  VdbeSetChanges(s
2d8e0 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a  qlite3 *, int);.
2d8f0 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e  int sqlite3AddIn
2d900 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
2d910 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74  nt sqlite3SubInt
2d920 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
2d930 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  t sqlite3MulInt6
2d940 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2d950 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
2d960 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  (int);.#ifdef SQ
2d970 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f  LITE_ENABLE_8_3_
2d980 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74  NAMES.void sqlit
2d990 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f  e3FileSuffix3(co
2d9a0 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a  nst char*, char*
2d9b0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2d9c0 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  e sqlite3FileSuf
2d9d0 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66  fix3(X,Y).#endif
2d9e0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f  .u8 sqlite3GetBo
2d9f0 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72  olean(const char
2da00 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20   *z,u8);..const 
2da10 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
2da20 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
2da30 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
2da40 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
2da50 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
2da60 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
2da70 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
2da80 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
2da90 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
2daa0 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ,u8,.           
2dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69               voi
2dac0 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
2dad0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
2dae0 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76  etNull(sqlite3_v
2daf0 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  alue*);.void sql
2db00 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71  ite3ValueFree(sq
2db10 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73  lite3_value*);.s
2db20 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71  qlite3_value *sq
2db30 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71  lite3ValueNew(sq
2db40 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65  lite3 *);.#ifnde
2db50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
2db60 46 31 36 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  F16.char *sqlite
2db70 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65  3Utf16to8(sqlite
2db80 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  3 *, const void*
2db90 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64  , int, u8);.#end
2dba0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  if.int sqlite3Va
2dbb0 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69  lueFromExpr(sqli
2dbc0 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  te3 *, Expr *, u
2dbd0 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  8, u8, sqlite3_v
2dbe0 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  alue **);.void s
2dbf0 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
2dc00 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
2dc10 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38  _value *, u8, u8
2dc20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2dc30 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65  E_AMALGAMATION.e
2dc40 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
2dc50 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
2dc60 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
2dc70 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
2dc80 63 68 61 72 20 73 71 6c 69 74 65 33 53 74 72 42  char sqlite3StrB
2dc90 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20  INARY[];.extern 
2dca0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2dcb0 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
2dcc0 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
2dcd0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2dce0 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
2dcf0 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
2dd00 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
2dd10 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
2dd20 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
2dd30 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
2dd40 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
2dd50 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e  nfig;.extern Fun
2dd60 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33  cDefHash sqlite3
2dd70 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
2dd80 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2dd90 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e  _OMIT_WSD.extern
2dda0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64   int sqlite3Pend
2ddb0 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a  ingByte;.#endif.
2ddc0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 56 44  #endif.#ifdef VD
2ddd0 42 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65 72  BE_PROFILE.exter
2dde0 6e 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34  n sqlite3_uint64
2ddf0 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65   sqlite3NProfile
2de00 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  Cnt;.#endif.void
2de10 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
2de20 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20  Moved(sqlite3*, 
2de30 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2de40 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
2de50 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
2de60 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
2de70 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
2de80 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
2de90 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2dea0 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73  RenameTable(Pars
2deb0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
2dec0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2ded0 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 43 6f  te3AlterRenameCo
2dee0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72 63  lumn(Parse*, Src
2def0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
2df00 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2df10 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
2df20 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2df30 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
2df40 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
2df50 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
2df60 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
2df70 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
2df80 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
2df90 74 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ts(sqlite3*, int
2dfa0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2dfb0 6f 64 65 52 68 73 4f 66 49 4e 28 50 61 72 73 65  odeRhsOfIN(Parse
2dfc0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2dfd0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
2dfe0 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  ubselect(Parse*,
2dff0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2e000 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28  lite3SelectPrep(
2e010 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2e020 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2e030 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2e040 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45  ctWrongNumTermsE
2e050 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72  rror(Parse *pPar
2e060 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a  se, Select *p);.
2e070 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68  int sqlite3Match
2e080 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63  SpanName(const c
2e090 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2e0a0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2e0b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
2e0c0 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2e0d0 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ExprNames(NameCo
2e0e0 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
2e0f0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2e100 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28  veExprListNames(
2e110 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2e120 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  prList*);.void s
2e130 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
2e140 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  ectNames(Parse*,
2e150 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
2e160 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
2e170 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
2e180 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
2e190 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
2e1a0 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
2e1b0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
2e1c0 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
2e1d0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
2e1e0 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2e1f0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2e200 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
2e210 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
2e220 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2e230 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
2e240 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
2e250 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
2e260 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2e270 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
2e280 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
2e290 20 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74   *);.void *sqlit
2e2a0 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70  e3RenameTokenMap
2e2b0 28 50 61 72 73 65 2a 2c 20 76 6f 69 64 2a 2c 20  (Parse*, void*, 
2e2c0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2e2d0 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e  lite3RenameToken
2e2e0 52 65 6d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f  Remap(Parse*, vo
2e2f0 69 64 20 2a 70 54 6f 2c 20 76 6f 69 64 20 2a 70  id *pTo, void *p
2e300 46 72 6f 6d 29 3b 0a 76 6f 69 64 20 73 71 6c 69  From);.void sqli
2e310 74 65 33 52 65 6e 61 6d 65 45 78 70 72 55 6e 6d  te3RenameExprUnm
2e320 61 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ap(Parse*, Expr*
2e330 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2e340 65 6e 61 6d 65 45 78 70 72 6c 69 73 74 55 6e 6d  enameExprlistUnm
2e350 61 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ap(Parse*, ExprL
2e360 69 73 74 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ist*);.CollSeq *
2e370 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65  sqlite3GetCollSe
2e380 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f  q(Parse*, u8, Co
2e390 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63  llSeq *, const c
2e3a0 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  har*);.char sqli
2e3b0 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28  te3AffinityType(
2e3c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c  const char*, Col
2e3d0 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  umn*);.void sqli
2e3e0 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65  te3Analyze(Parse
2e3f0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2e400 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2e410 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
2e420 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73  (BusyHandler*, s
2e430 71 6c 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69  qlite3_file*);.i
2e440 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
2e450 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
2e460 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2e470 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
2e480 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
2e490 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2e4a0 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
2e4b0 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
2e4c0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2e4d0 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
2e4e0 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
2e4f0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
2e500 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
2e510 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2e520 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
2e530 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
2e540 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2e550 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
2e560 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
2e570 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
2e580 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
2e590 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
2e5a0 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
2e5b0 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
2e5c0 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
2e5d0 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
2e5e0 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
2e5f0 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
2e600 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2e610 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  foAlloc(sqlite3*
2e620 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
2e630 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e  sqlite3KeyInfoUn
2e640 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  ref(KeyInfo*);.K
2e650 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2e660 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66  eyInfoRef(KeyInf
2e670 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
2e680 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e  lite3KeyInfoOfIn
2e690 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  dex(Parse*, Inde
2e6a0 78 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  x*);.KeyInfo *sq
2e6b0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 46 72 6f 6d  lite3KeyInfoFrom
2e6c0 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
2e6d0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2e6e0 20 69 6e 74 29 3b 0a 0a 23 69 66 64 65 66 20 53   int);..#ifdef S
2e6f0 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
2e700 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73  sqlite3KeyInfoIs
2e710 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66  Writeable(KeyInf
2e720 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  o*);.#endif.int 
2e730 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
2e740 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
2e750 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
2e760 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76  int, void *,.  v
2e770 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2e780 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2e790 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
2e7a0 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2e7b0 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2e7c0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2e7d0 29 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  ), .  void (*)(s
2e7e0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
2e7f0 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
2e800 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
2e810 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2e820 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2e830 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2e840 29 2c 20 0a 20 20 46 75 6e 63 44 65 73 74 72 75  ), .  FuncDestru
2e850 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
2e860 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r.);.void sqlite
2e870 33 4e 6f 6f 70 44 65 73 74 72 75 63 74 6f 72 28  3NoopDestructor(
2e880 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
2e890 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c  ite3OomFault(sql
2e8a0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2e8b0 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c  ite3OomClear(sql
2e8c0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2e8d0 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74  te3ApiExit(sqlit
2e8e0 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e  e3 *db, int);.in
2e8f0 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d  t sqlite3OpenTem
2e900 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20  pDatabase(Parse 
2e910 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
2e920 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74  3StrAccumInit(St
2e930 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33  rAccum*, sqlite3
2e940 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69  *, char*, int, i
2e950 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
2e960 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
2e970 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
2e980 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
2e990 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
2e9a0 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
2e9b0 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
2e9c0 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
2e9d0 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
2e9e0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
2e9f0 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
2ea00 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
2ea10 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
2ea20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
2ea30 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
2ea40 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
2ea50 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65  t u8 *);..#ifnde
2ea60 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  f SQLITE_OMIT_SU
2ea70 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74  BQUERY.int sqlit
2ea80 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61  e3ExprCheckIN(Pa
2ea90 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65  rse*, Expr*);.#e
2eaa0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2eab0 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28  ite3ExprCheckIN(
2eac0 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  x,y) SQLITE_OK.#
2ead0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2eae0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
2eaf0 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20  3_OR_STAT4.void 
2eb00 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75  sqlite3AnalyzeFu
2eb10 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
2eb20 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  nt sqlite3Stat4P
2eb30 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20  robeSetValue(.  
2eb40 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c    Parse*,Index*,
2eb50 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a  UnpackedRecord**
2eb60 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  ,Expr*,int,int,i
2eb70 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2eb80 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45  3Stat4ValueFromE
2eb90 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  xpr(Parse*, Expr
2eba0 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  *, u8, sqlite3_v
2ebb0 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  alue**);.void sq
2ebc0 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46  lite3Stat4ProbeF
2ebd0 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  ree(UnpackedReco
2ebe0 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  rd*);.int sqlite
2ebf0 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c  3Stat4Column(sql
2ec00 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  ite3*, const voi
2ec10 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71  d*, int, int, sq
2ec20 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2ec30 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65  char sqlite3Inde
2ec40 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  xColumnAffinity(
2ec50 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
2ec60 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
2ec70 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
2ec80 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
2ec90 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
2eca0 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  r.*/.#ifndef SQL
2ecb0 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
2ecc0 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
2ecd0 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
2ece0 2a 28 2a 29 28 75 36 34 29 2c 20 50 61 72 73 65  *(*)(u64), Parse
2ecf0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2ed00 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69  e3ParserFree(voi
2ed10 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64  d*, void(*)(void
2ed20 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  *));.#endif.void
2ed30 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76   sqlite3Parser(v
2ed40 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  oid*, int, Token
2ed50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61  );.int sqlite3Pa
2ed60 72 73 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74  rserFallback(int
2ed70 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
2ed80 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
2ed90 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
2eda0 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
2edb0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
2edc0 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
2edd0 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
2ede0 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
2edf0 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
2ee00 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
2ee10 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2ee20 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
2ee30 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2ee40 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2ee50 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
2ee60 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2ee70 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2ee80 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
2ee90 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
2eea0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
2eeb0 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
2eec0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2eed0 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
2eee0 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
2eef0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2ef00 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
2ef10 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
2ef20 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
2ef30 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2ef40 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2ef50 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
2ef60 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
2ef70 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
2ef80 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
2ef90 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
2efa0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2efb0 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
2efc0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2efd0 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
2efe0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2eff0 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
2f000 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2f010 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20  3VtabLock(X).#  
2f020 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2f030 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
2f040 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2f050 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
2f060 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2f070 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
2f080 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
2f090 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2f0a0 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
2f0b0 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
2f0c0 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
2f0d0 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
2f0e0 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
2f0f0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2f100 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
2f110 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
2f120 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
2f130 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
2f140 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64  (sqlite3 *db, Vd
2f150 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  be*);.   int sql
2f160 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
2f170 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2f180 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2f190 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
2f1a0 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
2f1b0 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
2f1c0 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
2f1d0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2f1e0 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
2f1f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2f200 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
2f210 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
2f220 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
2f230 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
2f240 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64  t, int);.   void
2f250 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2f260 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20  rtErrmsg(Vdbe*, 
2f270 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a  sqlite3_vtab*);.
2f280 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
2f290 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
2f2a0 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  te3*, Table*);. 
2f2b0 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65    Module *sqlite
2f2c0 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c  3VtabCreateModul
2f2d0 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a  e(.     sqlite3*
2f2e0 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ,.     const cha
2f2f0 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73  r*,.     const s
2f300 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a  qlite3_module*,.
2f310 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20       void*,.    
2f320 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a   void(*)(void*).
2f330 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20     );.#  define 
2f340 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
2f350 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
2f360 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
2f370 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
2f380 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  if.int sqlite3Vt
2f390 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
2f3a0 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75  Init(Parse*,Modu
2f3b0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2f3c0 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
2f3d0 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65  ableClear(sqlite
2f3e0 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  3*,Module*);.voi
2f3f0 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
2f400 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
2f410 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
2f420 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
2f430 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2f440 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
2f450 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
2f460 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
2f470 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
2f480 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2f490 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
2f4a0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2f4b0 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
2f4c0 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
2f4d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2f4e0 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
2f4f0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2f500 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
2f510 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
2f520 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
2f530 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2f540 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2f550 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
2f560 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2f570 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2f580 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
2f590 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
2f5a0 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
2f5b0 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
2f5c0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2f5d0 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
2f5e0 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
2f5f0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
2f600 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74  lite3StmtCurrent
2f610 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Time(sqlite3_con
2f620 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
2f630 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72  te3VdbeParameter
2f640 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e  Index(Vdbe*, con
2f650 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
2f660 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73  int sqlite3Trans
2f670 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69  ferBindings(sqli
2f680 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69  te3_stmt *, sqli
2f690 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69  te3_stmt *);.voi
2f6a0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52  d sqlite3ParserR
2f6b0 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 23 69  eset(Parse*);.#i
2f6c0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2f6d0 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 63 68 61  LE_NORMALIZE.cha
2f6e0 72 20 2a 73 71 6c 69 74 65 33 4e 6f 72 6d 61 6c  r *sqlite3Normal
2f6f0 69 7a 65 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  ize(Vdbe*, const
2f700 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
2f710 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
2f720 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
2f730 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
2f740 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
2f750 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2f760 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
2f770 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
2f780 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
2f790 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
2f7a0 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
2f7b0 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
2f7c0 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
2f7d0 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
2f7e0 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
2f7f0 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23  Modename(int);.#
2f800 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f810 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c  IT_WAL.  int sql
2f820 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73  ite3Checkpoint(s
2f830 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
2f840 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  t, int*, int*);.
2f850 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c    int sqlite3Wal
2f860 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
2f870 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
2f880 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e   char*,int);.#en
2f890 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2f8a0 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69  TE_OMIT_CTE.  Wi
2f8b0 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41  th *sqlite3WithA
2f8c0 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c  dd(Parse*,With*,
2f8d0 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
2f8e0 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69  ,Select*);.  voi
2f8f0 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  d sqlite3WithDel
2f900 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74  ete(sqlite3*,Wit
2f910 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  h*);.  void sqli
2f920 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73  te3WithPush(Pars
2f930 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  e*, With*, u8);.
2f940 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71  #else.#define sq
2f950 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c  lite3WithPush(x,
2f960 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  y,z).#define sql
2f970 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78  ite3WithDelete(x
2f980 2c 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  ,y).#endif.#ifnd
2f990 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
2f9a0 50 53 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a  PSERT.  Upsert *
2f9b0 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77  sqlite3UpsertNew
2f9c0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
2f9d0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
2f9e0 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f  st*,Expr*);.  vo
2f9f0 69 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  id sqlite3Upsert
2fa00 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
2fa10 55 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65  Upsert*);.  Upse
2fa20 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72  rt *sqlite3Upser
2fa30 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70  tDup(sqlite3*,Up
2fa40 73 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  sert*);.  int sq
2fa50 6c 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79  lite3UpsertAnaly
2fa60 7a 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c  zeTarget(Parse*,
2fa70 53 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a  SrcList*,Upsert*
2fa80 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2fa90 33 55 70 73 65 72 74 44 6f 55 70 64 61 74 65 28  3UpsertDoUpdate(
2faa0 50 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54  Parse*,Upsert*,T
2fab0 61 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74  able*,Index*,int
2fac0 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  );.#else.#define
2fad0 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65   sqlite3UpsertNe
2fae0 77 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55  w(v,w,x,y,z) ((U
2faf0 70 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69 6e  psert*)0).#defin
2fb00 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  e sqlite3UpsertD
2fb10 65 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66 69  elete(x,y).#defi
2fb20 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  ne sqlite3Upsert
2fb30 44 75 70 28 78 2c 79 29 20 20 20 20 20 20 20 28  Dup(x,y)       (
2fb40 28 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64  (Upsert*)0).#end
2fb50 69 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  if.../* Declarat
2fb60 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
2fb70 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
2fb80 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
2fb90 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
2fba0 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
2fbb0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
2fbc0 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
2fbd0 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
2fbe0 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
2fbf0 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
2fc00 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
2fc10 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
2fc20 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
2fc30 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
2fc40 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
2fc50 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
2fc60 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
2fc70 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
2fc80 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
2fc90 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
2fca0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a  unctionality is.
2fcb0 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66  ** provided (enf
2fcc0 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63  orcement of FK c
2fcd0 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69  onstraints requi
2fce0 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73  res the triggers
2fcf0 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f   sub-system)..*/
2fd00 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2fd10 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2fd20 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
2fd30 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
2fd40 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73  RIGGER).  void s
2fd50 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61  qlite3FkCheck(Pa
2fd60 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2fd70 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2fd80 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2fd90 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61  e3FkDropTable(Pa
2fda0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  rse*, SrcList *,
2fdb0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64   Table*);.  void
2fdc0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
2fdd0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
2fde0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2fdf0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
2fe00 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71  int sqlite3FkReq
2fe10 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61  uired(Parse*, Ta
2fe20 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29  ble*, int*, int)
2fe30 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46  ;.  u32 sqlite3F
2fe40 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c  kOldmask(Parse*,
2fe50 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79   Table*);.  FKey
2fe60 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72   *sqlite3FkRefer
2fe70 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a  ences(Table *);.
2fe80 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2fe90 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
2fea0 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
2feb0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2fec0 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  kCheck(a,b,c,d,e
2fed0 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
2fee0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
2fef0 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
2ff00 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
2ff10 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20  sk(a,b)         
2ff20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2ff30 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
2ff40 62 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64  b,c,d)    0.  #d
2ff50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
2ff60 65 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20  eferences(a)    
2ff70 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66      0.#endif.#if
2ff80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ff90 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76  _FOREIGN_KEY.  v
2ffa0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  oid sqlite3FkDel
2ffb0 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54  ete(sqlite3 *, T
2ffc0 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71  able*);.  int sq
2ffd0 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
2ffe0 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ex(Parse*,Table*
2fff0 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69  ,FKey*,Index**,i
30000 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt**);.#else.  #
30010 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
30020 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64  Delete(a,b).  #d
30030 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c  efine sqlite3FkL
30040 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63  ocateIndex(a,b,c
30050 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ,d,e).#endif.../
30060 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66  *.** Available f
30070 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20  ault injectors. 
30080 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65   Should be numbe
30090 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  red beginning wi
300a0 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  th 0..*/.#define
300b0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
300c0 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20  ECTOR_MALLOC    
300d0 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   0.#define SQLIT
300e0 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
300f0 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a  COUNT      1../*
30100 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
30110 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e  e to the code in
30120 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f   fault.c used fo
30130 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62  r identifying "b
30140 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63  enign".** malloc
30150 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20   failures. This 
30160 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20  is only present 
30170 69 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  if SQLITE_UNTEST
30180 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64  ABLE.** is not d
30190 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  efined..*/.#ifnd
301a0 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
301b0 41 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ABLE.  void sqli
301c0 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
301d0 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
301e0 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
301f0 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
30200 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
30210 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
30220 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
30230 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
30240 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
30250 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
30260 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
30270 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
30280 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
30290 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
302a0 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
302b0 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
302c0 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
302d0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
302e0 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
302f0 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
30300 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
30310 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
30320 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
30330 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
30340 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
30350 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
30360 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
30370 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
30380 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
30390 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
303a0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
303b0 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
303c0 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
303d0 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
303e0 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
303f0 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
30400 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
30410 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
30420 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
30430 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
30440 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
30450 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
30460 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
30470 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
30480 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
30490 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
304a0 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
304b0 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
304c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
304d0 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
304e0 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
304f0 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
30500 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
30510 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
30520 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
30530 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u32, int*, int
30540 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73  *, int*);..int s
30550 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
30560 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
30570 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
30580 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
30590 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
305a0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
305b0 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
305c0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
305d0 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49  ITE_ENABLE_ATOMI
305e0 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64  C_WRITE) \. || d
305f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
30600 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49  ABLE_BATCH_ATOMI
30610 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73  C_WRITE).  int s
30620 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65  qlite3JournalCre
30630 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ate(sqlite3_file
30640 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74   *);.#endif..int
30650 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49   sqlite3JournalI
30660 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65  sInMemory(sqlite
30670 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64  3_file *p);.void
30680 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
30690 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
306a0 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  ile *);..void sq
306b0 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
306c0 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65  htAndFlags(Parse
306d0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
306e0 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  p);.#if SQLITE_M
306f0 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
30700 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c    int sqlite3Sel
30710 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65  ectExprHeight(Se
30720 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73  lect *);.  int s
30730 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
30740 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e  eight(Parse*, in
30750 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  t);.#else.  #def
30760 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
30770 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
30780 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
30790 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
307a0 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
307b0 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
307c0 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
307d0 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
307e0 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
307f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
30800 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
30810 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
30820 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
30830 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
30840 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
30850 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
30860 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
30870 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
30880 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
30890 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
308a0 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
308b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
308c0 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
308d0 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
308e0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
308f0 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
30900 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
30910 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
30920 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
30930 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
30940 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
30950 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
30960 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  r *);.#endif.#if
30970 20 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52   defined(YYCOVER
30980 41 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  AGE).  int sqlit
30990 65 33 50 61 72 73 65 72 43 6f 76 65 72 61 67 65  e3ParserCoverage
309a0 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a  (FILE*);.#endif.
309b0 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  ./*.** If the SQ
309c0 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52  LITE_ENABLE IOTR
309d0 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20  ACE exists then 
309e0 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
309f0 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f  ble.** sqlite3Io
30a00 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  Trace is a point
30a10 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c  er to a printf-l
30a20 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ike routine used
30a30 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f   to.** print I/O
30a40 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65   tracing message
30a50 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
30a60 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
30a70 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  CE.# define IOTR
30a80 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69  ACE(A)  if( sqli
30a90 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71  te3IoTrace ){ sq
30aa0 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20  lite3IoTrace A; 
30ab0 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  }.  void sqlite3
30ac0 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56  VdbeIOTraceSql(V
30ad0 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50  dbe*);.SQLITE_AP
30ae0 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  I SQLITE_EXTERN 
30af0 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45  void (SQLITE_CDE
30b00 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61  CL *sqlite3IoTra
30b10 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ce)(const char*,
30b20 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ...);.#else.# de
30b30 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a  fine IOTRACE(A).
30b40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
30b50 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58  VdbeIOTraceSql(X
30b60 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
30b70 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61  These routines a
30b80 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  re available for
30b90 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75   the mem2.c debu
30ba0 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c  gging memory all
30bb0 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20  ocator.** only. 
30bc0 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74   They are used t
30bd0 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69  o verify that di
30be0 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20  fferent "types" 
30bf0 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c  of memory.** all
30c00 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  ocations are pro
30c10 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79  perly tracked by
30c20 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a   the system..**.
30c30 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
30c40 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73  ugSetType() sets
30c50 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61   the "type" of a
30c60 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20  n allocation to 
30c70 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45  one of.** the ME
30c80 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64  MTYPE_* macros d
30c90 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54  efined below.  T
30ca0 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20  he type must be 
30cb0 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a  a bitmask with.*
30cc0 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73  * a single bit s
30cd0 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  et..**.** sqlite
30ce0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
30cf0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
30d00 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69  if any of the bi
30d10 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
30d20 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
30d30 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
30d40 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
30d50 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
30d60 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c  etType()..** sql
30d70 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
30d80 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65  ype() is intende
30d90 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65  d for use inside
30da0 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
30db0 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  ents..**.** sqli
30dc0 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
30dd0 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
30de0 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
30df0 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
30e00 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
30e10 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
30e20 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
30e30 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
30e40 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a  gSetType()..**.*
30e50 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f  * Perhaps the mo
30e60 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69  st important poi
30e70 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72  nt is the differ
30e80 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d  ence between MEM
30e90 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64  TYPE_HEAP.** and
30ea0 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
30eb0 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63  DE.  If an alloc
30ec0 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45  ation is MEMTYPE
30ed0 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74  _LOOKASIDE, that
30ee0 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67   means.** it mig
30ef0 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  ht have been all
30f00 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73  ocated by lookas
30f10 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20  ide, except the 
30f20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a  allocation was.*
30f30 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c  * too large or l
30f40 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72  ookaside was alr
30f50 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69  eady full.  It i
30f60 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76  s important to v
30f70 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c  erify.** that al
30f80 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  locations that m
30f90 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73  ight have been s
30fa0 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b  atisfied by look
30fb0 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a  aside are not.**
30fc0 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20   passed back to 
30fd0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
30fe0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20  ee() routines.  
30ff0 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20  Asserts such as 
31000 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61  the.** example a
31010 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20  bove are placed 
31020 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61  on the non-looka
31030 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
31040 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a  ines to verify.*
31050 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  * this constrain
31060 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  t..**.** All of 
31070 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f  this is no-op fo
31080 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62  r a production b
31090 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63  uild.  It only c
310a0 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61  omes into.** pla
310b0 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54  y when the SQLIT
310c0 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69  E_MEMDEBUG compi
310d0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
310e0 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  s used..*/.#ifde
310f0 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
31100 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
31110 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
31120 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
31130 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
31140 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  HasType(void*,u8
31150 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
31160 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76  MemdebugNoType(v
31170 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a  oid*,u8);.#else.
31180 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
31190 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
311a0 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  X,Y)  /* no-op *
311b0 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  /.# define sqlit
311c0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
311d0 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69  e(X,Y)  1.# defi
311e0 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
311f0 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20  ugNoType(X,Y)   
31200 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  1.#endif.#define
31210 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20   MEMTYPE_HEAP   
31220 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e      0x01  /* Gen
31230 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61  eral heap alloca
31240 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
31250 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
31260 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61  DE  0x02  /* Hea
31270 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  p that might hav
31280 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65  e been lookaside
31290 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
312a0 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30  YPE_PCACHE     0
312b0 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63  x04  /* Page cac
312c0 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  he allocations *
312d0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69  /../*.** Threadi
312e0 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a  ng interface.*/.
312f0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  #if SQLITE_MAX_W
31300 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a  ORKER_THREADS>0.
31310 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
31320 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68  dCreate(SQLiteTh
31330 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28  read**,void*(*)(
31340 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69  void*),void*);.i
31350 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
31360 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61  Join(SQLiteThrea
31370 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e  d*, void**);.#en
31380 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
31390 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44  (SQLITE_ENABLE_D
313a0 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64  BPAGE_VTAB) || d
313b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
313c0 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  ST).int sqlite3D
313d0 62 70 61 67 65 52 65 67 69 73 74 65 72 28 73 71  bpageRegister(sq
313e0 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a  lite3*);.#endif.
313f0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
31400 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54  TE_ENABLE_DBSTAT
31410 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65  _VTAB) || define
31420 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69  d(SQLITE_TEST).i
31430 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74  nt sqlite3Dbstat
31440 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
31450 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
31460 73 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f  sqlite3ExprVecto
31470 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70  rSize(Expr *pExp
31480 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  r);.int sqlite3E
31490 78 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72  xprIsVector(Expr
314a0 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
314b0 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65  sqlite3VectorFie
314c0 6c 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c  ldSubexpr(Expr*,
314d0 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
314e0 69 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f  ite3ExprForVecto
314f0 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78  rField(Parse*,Ex
31500 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  pr*,int);.void s
31510 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f  qlite3VectorErro
31520 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70  rMsg(Parse*, Exp
31530 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  r*);..#ifndef SQ
31540 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
31550 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f  EOPTION_DIAGS.co
31560 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74  nst char **sqlit
31570 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73  e3CompileOptions
31580 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65  (int *pnOpt);.#e
31590 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
315a0 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a     SQLITEINT_H */.